我正在尝试编写一个程序,它将显示单击按钮时的时间和日期

时间:2015-04-20 16:53:37

标签: java multithreading

我正在尝试编写一个程序 - 在点击时 - 将启动一个新的Thread,然后显示日期和时间,但它不能按我的预期工作。任何帮助将不胜感激。

import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;


/**
 * @author Hobbit
 *
 */
public class Myapp extends Applet implements Runnable,ActionListener {

    Button b; // I'm creating a button named b
    Thread t;

    /* (non-Javadoc)
     * @see java.applet.Applet#init()
     */     
    public void init() {
        b = new Button(":)");
        add(b);
        b.addActionListener(this);
    }

    /* (non-Javadoc)
     * @see java.awt.Container#paint(java.awt.Graphics)
     */
    public void paint(Graphics g) {
        Date d = new Date();
        g.drawString(d + "", 50, 50);
        setBackground(Color.green);
    }

    /* (non-Javadoc)
     * @see java.lang.Runnable#run()
     */
    public void run() {

        while(true) {

            repaint();
            try {
                Thread.sleep(600);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    /* (non-Javadoc)
     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
     */
    public void actionPerformed(ActionEvent f) {

        // If the button is clicked then it should trigger the thread
        if (f.getSource() == b);

        { 
            Thread t = new Thread();
            t.start();              
        }

    }

}

1 个答案:

答案 0 :(得分:0)

代码存在多个问题,但最重要的是,Thread无效。如果您希望它执行某些操作,则需要将Runnable传递给它,如下所示:

Runnable myAwesomeRunnable = new Runnable() {
    public void run() {
        System.out.println(new Date());
    }
};

Thread t = new Thread(myAwesomeRunnable);
t.start();

我会建议这种方法,而不是实现MyApp类中的所有接口,因为我相信它更清晰,更容易理解发生了什么,但是,在你的例子中,你也可以使用:

Thread t = new Thread(this);
t.start();

因为thisRunnable的实例。

另一件事是,你并没有真正检查按下了哪个按钮。这段代码:

    // If the button is clicked then it should trigger the thread
    if (f.getSource() == b);

    { 
        Thread t = new Thread();
        t.start();              
    }

导致线程启动始终,因为if语句后面带有分号。如果您希望if决定是否启动该线程,您的代码应如下所示:

// If the button is clicked then it should trigger the thread
if (f.getSource() == b) {
    Thread t = new Thread(myAweSomeRunnable);
    t.start();              
}