当前位置: 技术问答>java相关
<Thinking in Java>的例子,运行出问题,帮我看看是什么问题...
来源: 互联网 发布时间:2015-03-28
本文导语: 运行后,按"Start"按钮,程序就死循环,没反应了。 为什么呢? import javax.swing.*; import java.awt.event.*; import java.awt.*; import com.bruceeckel.swing.*; public class Counter1 extends JApplet { private int count = 0; private JButton ...
运行后,按"Start"按钮,程序就死循环,没反应了。 为什么呢?
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import com.bruceeckel.swing.*;
public class Counter1 extends JApplet {
private int count = 0;
private JButton
start = new JButton("Start"),
onOff = new JButton("Toggle");
private JTextField t = new JTextField(10);
private boolean runFlag = true;
public void init() {
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(t);
start.addActionListener(new StartL());
cp.add(start);
onOff.addActionListener(new OnOffL());
cp.add(onOff);
}
public void go() {
while (true) {
try {
Thread.sleep(500);
} catch(InterruptedException e) {
System.err.println("Interrupted");
}
if (runFlag)
t.setText(Integer.toString(count++));
}
}
class StartL implements ActionListener {
public void actionPerformed(ActionEvent e) {
go();
}
}
class OnOffL implements ActionListener {
public void actionPerformed(ActionEvent e) {
runFlag = !runFlag;
}
}
public static void main(String[] args) {
Console.run(new Counter1(), 300, 100);
}
}
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import com.bruceeckel.swing.*;
public class Counter1 extends JApplet {
private int count = 0;
private JButton
start = new JButton("Start"),
onOff = new JButton("Toggle");
private JTextField t = new JTextField(10);
private boolean runFlag = true;
public void init() {
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(t);
start.addActionListener(new StartL());
cp.add(start);
onOff.addActionListener(new OnOffL());
cp.add(onOff);
}
public void go() {
while (true) {
try {
Thread.sleep(500);
} catch(InterruptedException e) {
System.err.println("Interrupted");
}
if (runFlag)
t.setText(Integer.toString(count++));
}
}
class StartL implements ActionListener {
public void actionPerformed(ActionEvent e) {
go();
}
}
class OnOffL implements ActionListener {
public void actionPerformed(ActionEvent e) {
runFlag = !runFlag;
}
}
public static void main(String[] args) {
Console.run(new Counter1(), 300, 100);
}
}
|
我倒~~
粗一看代码我也以为不至于停止响应,原来这是多线程的一个反面示例,以引出“为什么要使用多线程”。
14.1.2节就有解决问题的代码示例。
兄台这84分可白丢了哦。呵呵。
粗一看代码我也以为不至于停止响应,原来这是多线程的一个反面示例,以引出“为什么要使用多线程”。
14.1.2节就有解决问题的代码示例。
兄台这84分可白丢了哦。呵呵。
|
嘿嘿不试就算了,你那while(true)是死循环你知道吗?
你得找个地方break出来,那个标志位就是你从外面控制跳出来的出口
你得找个地方break出来,那个标志位就是你从外面控制跳出来的出口