问答题
综合应用题
下面是一个Applet程序,其功能是实现一个计数器,每隔0.15秒计数器数值加1,数值动态变化,并且能够控制计数器的暂停和继续。要求通过使用swing的构件建立图形用户界面,主要包括一个文本区域,用于显示计数器结果;两个按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。
注意:不改动程序的结构,不得增行或删行。
程序运行结果如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/*
*/
public class ex7_3 extends JApplet {
private JTextField jtf = new JTextField(15);
private JButton Hold = new JButton("Hold"),resume = new JButton("Resume");
private ex7_3th obj7_3th = new ex7_3th();
class ex7_3th extends Thread {
private int cnt = 0;
private boolean bIsHold = false;
public ex7_3th() { start(); }
public void hold() {
bIsHold = true;
}
public synchronized void fauxResume() {
bIsHold = false;
wait();
}
public void run() {
while (true) {
try {
sleep(150);
synchronized(this) {
while(bIsHold)
notify();
}
} catch(InterruptedException ie) {
System.err.println("Interrupted");
}
jtf.setText(cnt);
}
}
}
public void init() {
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(jtf);
Hold.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent ae) {
obj7_3th.hold();
}
});
cp.add(Hold);
resume.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
obj7_3th.fauxResume();
}
});
cp.add(resume);
}
public static void main(String[] args) {
ex7_3 obj7_3=new ex7_3();
String str = obj7_3.getClass().toString();
if(str.indexOf("class") != -1)
str = str.substring(6);
JFrame frm = new JFrame(str);
frm.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
frm.getContentPane().add(obj7_3);
frm.setSize(300, 200);
obj7_3.init();
obj7_3.start();
frm.setVisible(true);
}
}
ex7_3.html
ex7_3
【参考答案】
notify()
wait()
jtf.setText.(Integer.toString(cnt++))