[问答题] 下面是一个Applet程序,其功能是实现一个计数器,每隔0.15秒计数器数值加1,数值动态变化,并且能够控制计数器的暂停和继续。要求通过使用swing的构件建立图形用户界面,主要包括一个文

14 查阅

[问答题] 下面是一个Applet程序,其功能是实现一个计数器,每隔0.15秒计数器数值加1,数值动态变化,并且能够控制计数器的暂停和继续。要求通过使用swing的构件建立图形用户界面,主要包括一个文本区域,用于显示计数器结果;两个按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。注意:不改动程序的结构,不得增行或删行。

import javax, swing. *

import java. awt. *

import java. awt. event. *

/*

<applet code= "ex4_2. class" width=800 height=400>

</applet>

*/

public class ex4_2 extends JApplet

private JTextField jtf=new JTextField(15);

private JButton Hold = new JButton ("Hold"), resume = new JButton ( "Resume" );

private ex4_2th obj4_2th= new ex4_2th();

class ex4_2th extends Thread

private int cnt=0;

private boolean bIsHold=false;

public ex4_2th() start();

public void hold()

bIsHold=true

public synchronized void fauxResume()

bIsHold=false;

wait( );

参考答案:

notify()wait()jtf.setText(Integer.toString(cnt++))

本题主要考查图形用户界面,swing以及线程同步、共享、死锁相结合的综合应用。解题关键是熟悉wait()方法和notify()方法的含义。 wait()必须被声明为synchronized,这样它才能拥有对象锁。fauxResume()把bIsHold标志设为false,并调用notify(),为了唤醒synchronized子句中的wait(),所以notify()也必须被声明为 synchronized,这样才能在调用notify()之前获得对象锁(然后该对象锁才能在wait()执行时被运用)。本题中,第一和第二处,应该在bIsHold为true时调用wait(),而在fauxResume()中调用notify();第三处,需要对int类型作转换才能够作为String类型输出,并且要对计数器变量 cnt做累加。

计算机考试