问答题

下面Applet程序,其功能是实现一个计数器,每隔0.15秒计数器数值加1,数值动态变化,并且能够控制计数器的暂停和继续。要求通过使用swing的构件建立图形用户界面,主要包括一个文本区域,用于显示计数器结果;两个按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。 注意:不改动程序的结构,不得增行或删行。 程序运行结果如下:
import javax.swing.*; import java.awt.*; import java.awt.event.*; /* <applet code="ex7_3.class" width=800 height=400 > </applet> */ 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) not i fy ( ); } } 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= obi7_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(O); } }); frm.getContentPane().add(obj7_3); frm.setSize(300, 200); obj7_3.init(); obi7_3.start(); frm.setVisible(true); } } ex7_3.html <HTML> <HEAD> <TITLE>ex7_3</TITLE> </HEAD> <BODY> <applet code="ex7_3.class"width=800 height=400> </applet> </BODY> </HTML>

【参考答案】

notify()wait()jtf.setText(Integer.toString(cnt++))[解析] 本题主要考......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题