你问的地方是对的,可是你内面的for循环没结束啊,要等他60次完毕啊!
解决方案 »
- 关于获取系统时间时出现的问题
- 算除法时,除数为0,但为何显示的是Infinity,而不是抛出异常
- java调用可执行程序的问题
- jakarta-tomcat5.0.12在哪下载?
- 这样的方法定义我不明白,请各位指教。
- 请问部署在同一个应用服务上的两个不同的war包,其中一个能否用类反射机制读到另一个war包的类信息?
- 如何实现float 到 int 的类型转换,string 到 int 的类型转换?
- 有哪位大哥知道下面的运行错误怎么解决?
- 请问,如何装载mssql的jdbc的驱动程序和设置java执行程序时的参数。
- 请问:怎么删除系统中的唯一的实例???
- JAVA 应用程序\小程序中能不能运行其它程序(.EXE)的 如果能请问应该怎样调用?
- Graphics绘图环境的问题,急,在线等待!
while(flag){
for(int min = 1 ;min<60;min++){
for(int sec=0;sec<60;sec++) {
//这是加的,注意啊,就着而已.
if(!flag) return;
try{
synchronized(this){ wait(1000);}
} catch(InterruptedException e){
System.err.println("Interrupted");
}
second.setText("0"+sec);
}
minute.setText(Integer.toString(min));
}
}
}这样就可以了,你的flag为假后就结束了.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Ddd extends JApplet{ //Clock和JiaoJuan是两个继承自Thread的类。
private Clock clock =null;
private JLabel minute = new JLabel("00"); //这几个JLabel用来显示时间
private JLabel colon = new JLabel(":");
private JLabel second = new JLabel("00");
private JButton start = new JButton("开始");
private JButton handin = new JButton("交卷");
public void init(){
Container cp = getContentPane();
cp.setLayout(new FlowLayout());
cp.add(minute);
cp.add(colon);
cp.add(second);
cp.add(start);
cp.add(handin);
StartL sl=new StartL();
start.addActionListener(sl);
handin.addActionListener(sl);
}
class StartL implements ActionListener{
public void actionPerformed(ActionEvent e){
if(e.getSource()==start)
clock = new Clock();
else {
if(clock==null)return;
clock.timeup();
minute.setText("00");
second.setText("00");
}
}
}class Clock extends Thread //用于计时和显示的类
{
private boolean flag = true; public Clock(){
minute.setText("00");
second.setText("00");
start();
}
public void run(){
while(flag){
for(int min = 1 ;min<60;min++){
for(int sec=0;sec<60;sec++){
if(!flag) return;
try{
synchronized(this){
wait(1000);}
}
catch(InterruptedException e){
System.err.println("Interrupted");
}
if(!flag) return;
second.setText(sec<10?"0"+Integer.toString(sec):Integer.toString(sec));
}
minute.setText(min<10?"0"+Integer.toString(min):Integer.toString(min));
}
}
}
public void timeup(){flag=false;}
//这里我想问一下,是不是flag=false, clock这个线程就终止了?因为run方法不再执行了么.
}}
if(!flag) return;
说明run函数已经返回,当然这个线程也就消失
如果要真的实现你所讲的,最好把线程模型改一改,而且,终止一个线程也没必要另外开一个线程9JiaoJuan),因为,你至少还拥有一个主线程嘛!简单才是最可靠的。