我正在尝试编写一个程序 - 在点击时 - 将启动一个新的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();
}
}
}
答案 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();
因为this
是Runnable
的实例。
另一件事是,你并没有真正检查按下了哪个按钮。这段代码:
// 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();
}