下面是一个Applet程序,其功能是实现一个计数器,每隔0.15秒计数器数值加1,数值动态变化,并且能够控制计数器的暂停和继续。要求通过使用Swing的构件建立图形用户界面。主要包括一个文本区域,用于显示计数器结果:两个按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。注意:不改动程序的结构,不得增行或删行。源程序文件代码清单如下。import javax.swing.*;import java.awt.*;import java.awt.event.*;/*<applet code="ex19_3.class" width=800 height=400></applet>*/public class ex19_3 extends JApplet{private JTextField jtf=new JTextField(15);private JButton Hold=new JButton("Hold");private JButton resume=new JButton("Resume");private ex19_3th obj19_3th=new ex19_3th();class ex19_3th extends Thread{private int cnt=0;private boolean bIsHold=false;public ex19_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){obj19_3th.hold ( );}});cp.add(Hold);resume.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){obj19_3th.fauxResume();}&n
下面是一个Applet程序,其功能是实现一个计数器,每隔0.15秒计数器数值加1,数值动态变化,并且能够控制计数器的暂停和继续。要求通过使用Swing的构件建立图形用户界面。主要包括一个文本区域,用于显示计数器结果:两个按钮,一个使计数器暂停,一个使计数器继续工作。请改正程序中的错误(有下划线的语句),使程序能输出正确的结果。
注意:不改动程序的结构,不得增行或删行。
源程序文件代码清单如下。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/*
<applet code="ex19_3.class" width=800 height=400>
</applet>
*/
public class ex19_3 extends JApplet
{
private JTextField jtf=new JTextField(15);
private JButton Hold=new JButton("Hold");
private JButton resume=new JButton("Resume");
private ex19_3th obj19_3th=new ex19_3th();
class ex19_3th extends Thread
{
private int cnt=0;
private boolean bIsHold=false;
public ex19_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)
{
obj19_3th.hold ( );
}
});
cp.add(Hold);
resume.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
obj19_3th.fauxResume();
}
&n