线程不会从Java开始

时间:2015-02-17 14:09:45

标签: java multithreading

以下代码应该生成一个带有时间的常规帧,当时间达到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方法的类具有基本的框架设置,没有什么重要的。

2 个答案:

答案 0 :(得分:7)

您没有为Runnable指定Thread参数(我认为应该是this,因为您的Core类实现了Runnable):

private Thread threadObject = new Thread(this);

答案 1 :(得分:1)

TNT的回答是正确的,但还不完整。您的程序有多个问题。您将面临的下一个问题是run()方法中没有循环。它将调用updateTime()和writeLabel()一次,然后线程将终止。

之后的下一个问题是你的updateTime()方法。看起来似乎计算秒数,但是你的run()方法看起来像,如果它有一个循环,它每分钟只调用一次updateTime()。这意味着它需要90个小时,而不是在程序弹出对话前90分钟。