帮我看看这个基本的线程题目 该程序里有几个问题:1:stop();resume();已经建议不用2:两个onject之间比较用==我感觉不是很妥当 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 resume()是恢复,在线程被悬置suspend()时才能用来恢复它,stop()线程就死亡了。resume()当然就不起作用了。 程序一次运行一个线程只能有一次thread.start(),不能点一下start()一次,只能是挂起suspend()和resume()配合,或是wait()和nitify()配合使用 Thread.stop之后,如果想要再次启动,需要重新New一个出来。因为在Thread中,一旦停止,再次开始是不可能的。 多线程哪块我也不是很懂, 调了好长时间效果不是很好..import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.event.*;public class Frame1 extends JFrame implements Runnable{ JTextField txtField = new JTextField(10); JButton btn = new JButton("start"); JButton btn1=new JButton("stop"); JButton btn2=new JButton("restart"); boolean started = false; Thread thread=null; public Frame1() { Container con=getContentPane(); con.setLayout(new FlowLayout()); con.add(txtField); con.add(btn); con.add(btn1); con.add(btn2); btn.addActionListener(new Bstart()); btn1.addActionListener(new Bstart()); btn2.addActionListener(new Bstart()); thread = new Thread(this); } public synchronized void run() { try { for(int i=1;i<61;i++) { thread.sleep(1000); txtField.setText(i+""); if(started == false){ thread.wait(); } else{ thread.yield(); } } } catch(Exception e1) { e1.printStackTrace(); } } class Bstart implements ActionListener { public void actionPerformed(ActionEvent e) { Object s=e.getSource(); if(s==btn) { if(!thread.isAlive()){ thread.start(); started = true; } else{ //thread.yield(); } } if(s==btn1) { try{ //thread.wait(); started = false; } catch(Exception ex){ System.out.println("ex="+ex); } } if(s==btn2) { thread.resume(); } } } public static void main(String[] args) { Frame1 frame1 = new Frame1(); frame1.setSize(300,300); frame1.setVisible(true); }} cuilichen(fjfjfjfj)他说的已经很对了,你将线程停止了,相当于生命周期结束了,怎么能重新开始呢?除非你Thread.wait();让它停顿,而不是让它停止! import javax.swing.*;import java.awt.*;import java.awt.event.*;public class Frame1 extends JFrame implements Runnable { JTextField txtField = new JTextField(10); JButton btn = new JButton("start"); JButton btn1 = new JButton("stop"); JButton btn2 = new JButton("restart"); Thread thread = null; private volatile boolean threadSuspended = false; public Frame1() { Container con = getContentPane(); con.setLayout(new FlowLayout()); con.add(txtField); con.add(btn); btn1.setEnabled(false); btn2.setEnabled(false); con.add(btn1); con.add(btn2); btn.addActionListener(new Bstart()); btn1.addActionListener(new Bstart()); btn2.addActionListener(new Bstart()); thread = new Thread(this); } public void run() { try { for (int i = 1; i < 61; i++) { Thread.sleep(1000); txtField.setText(i + ""); synchronized (thread) { while (threadSuspended) thread.wait(); } } } catch (Exception e1) { e1.printStackTrace(); } } class Bstart implements ActionListener { public void actionPerformed(ActionEvent e) { Object s = e.getSource(); if (s == btn) { thread.start(); btn.setEnabled(false); btn1.setEnabled(true); } if (s == btn1) { threadSuspended = true; btn1.setEnabled(false); btn2.setEnabled(true); } if (s == btn2) { threadSuspended = false; btn1.setEnabled(true); btn2.setEnabled(false); synchronized (thread) { thread.notifyAll(); } } } } public static void main(String[] args) { Frame1 frame1 = new Frame1(); frame1.setSize(300, 300); frame1.setDefaultCloseOperation(EXIT_ON_CLOSE); frame1.setVisible(true); }} 跪求求算法。 求解惑 == 与 equals ..谢了 小游戏菜单重新开始问题 求JAVA实现SOA框架的简单代码 LinkedHashMap的负载因子干啥用的? 第二届全国ITAT教育工程就业技能大赛预赛试题 JBUILDER中使用SWING时自定义异常问题 请教,一个字符串题? 悬赏100分,帮我解决如何打印JTABLE中的数据!急! 100分 加 一躬到地!如何将 ResultSet 对象转化成 Object[][]的形式? 请教:关于匿名内部类 一个基础问题
因为在Thread中,一旦停止,再次开始是不可能的。
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
public class Frame1 extends JFrame implements Runnable
{
JTextField txtField = new JTextField(10);
JButton btn = new JButton("start");
JButton btn1=new JButton("stop");
JButton btn2=new JButton("restart");
boolean started = false;
Thread thread=null; public Frame1()
{ Container con=getContentPane();
con.setLayout(new FlowLayout());
con.add(txtField);
con.add(btn);
con.add(btn1);
con.add(btn2);
btn.addActionListener(new Bstart());
btn1.addActionListener(new Bstart());
btn2.addActionListener(new Bstart());
thread = new Thread(this);
} public synchronized void run()
{
try
{
for(int i=1;i<61;i++)
{
thread.sleep(1000);
txtField.setText(i+"");
if(started == false){
thread.wait();
}
else{
thread.yield();
}
}
}
catch(Exception e1)
{
e1.printStackTrace();
}
} class Bstart implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
Object s=e.getSource();
if(s==btn)
{
if(!thread.isAlive()){
thread.start();
started = true;
}
else{
//thread.yield();
}
}
if(s==btn1)
{
try{
//thread.wait();
started = false;
}
catch(Exception ex){
System.out.println("ex="+ex);
} }
if(s==btn2)
{
thread.resume();
}
}
}
public static void main(String[] args)
{
Frame1 frame1 = new Frame1();
frame1.setSize(300,300);
frame1.setVisible(true);
}
}
他说的已经很对了,你将线程停止了,相当于生命周期结束了,怎么能重新开始呢?
除非你Thread.wait();让它停顿,而不是让它停止!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;public class Frame1 extends JFrame implements Runnable { JTextField txtField = new JTextField(10);
JButton btn = new JButton("start");
JButton btn1 = new JButton("stop");
JButton btn2 = new JButton("restart");
Thread thread = null;
private volatile boolean threadSuspended = false; public Frame1() { Container con = getContentPane();
con.setLayout(new FlowLayout());
con.add(txtField);
con.add(btn);
btn1.setEnabled(false);
btn2.setEnabled(false);
con.add(btn1);
con.add(btn2);
btn.addActionListener(new Bstart());
btn1.addActionListener(new Bstart());
btn2.addActionListener(new Bstart());
thread = new Thread(this); } public void run() {
try {
for (int i = 1; i < 61; i++) {
Thread.sleep(1000);
txtField.setText(i + "");
synchronized (thread) {
while (threadSuspended)
thread.wait();
}
}
} catch (Exception e1) {
e1.printStackTrace();
}
} class Bstart implements ActionListener { public void actionPerformed(ActionEvent e) {
Object s = e.getSource();
if (s == btn) {
thread.start();
btn.setEnabled(false);
btn1.setEnabled(true);
}
if (s == btn1) {
threadSuspended = true;
btn1.setEnabled(false);
btn2.setEnabled(true);
}
if (s == btn2) {
threadSuspended = false;
btn1.setEnabled(true);
btn2.setEnabled(false);
synchronized (thread) {
thread.notifyAll();
}
}
}
} public static void main(String[] args) {
Frame1 frame1 = new Frame1();
frame1.setSize(300, 300);
frame1.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame1.setVisible(true);
}
}