以下代码应该生成一个带有时间的常规帧,当时间达到90分钟时它应该显示一条消息。不知怎的,线程不会启动,永远不会显示消息Thread is working properly
。我已阅读the following Oracle文章,但无法找到任何解决方案。
public class Core extends JFrame implements Runnable{
private int second;
private int minute;
private JLabel presentor;
private Thread threadObject = new Thread();
public Core(){
second = 1;
minute = 0;
presentor = new JLabel();
writeLabel();
add(presentor , BorderLayout.CENTER);
threadObject.start();
}
public void run(){
JOptionPane.showMessageDialog(null, "Thread is working properly");
try{Thread.sleep(60000);}
catch(InterruptedException e){e.printStackTrace();}
updateTime();
writeLabel();
if(minute > 89){
JOptionPane.showMessageDialog(null, "90 minutes have passed away , take a break!");
this.getParent().setFocusable(true);
}
}
public void writeLabel(){
presentor.setText(minute + ":" + second);
}
public void updateTime(){
second++;
if(second < 60)
return;
second = 0;
minute++;
}
}
还有一个Main
方法的类具有基本的框架设置,没有什么重要的。
答案 0 :(得分:7)
您没有为Runnable
指定Thread
参数(我认为应该是this
,因为您的Core类实现了Runnable
):
private Thread threadObject = new Thread(this);
答案 1 :(得分:1)
TNT的回答是正确的,但还不完整。您的程序有多个问题。您将面临的下一个问题是run()方法中没有循环。它将调用updateTime()和writeLabel()一次,然后线程将终止。
之后的下一个问题是你的updateTime()方法。看起来似乎计算秒数,但是你的run()方法看起来像,如果它有一个循环,它每分钟只调用一次updateTime()。这意味着它需要90个小时,而不是在程序弹出对话前90分钟。