我有一个JButton来调用我的线程。但我真正想做的是在一分钟之后停止线程! 我的actionListener方法是:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
new Frame2().setVisible(true);
Thread t=new Thread(new Frame2());
t.start();
}
我的线程只运行一分钟如下:
public void run(){
int i;
while(!Thread.currentThread().isInterrupted()){
for(i=0;i<=100;i++){
if(i==100){
Thread.currentThread().interrupt();
}
try {
Thread.currentThread().sleep(600);
} catch (InterruptedException ex) {
System.out.print("THREAD CLOSED");
return;
}
}
System.out.print("DOING THINGS BLA BLA");
}
}
问题: 我成功地在一分钟后停止了线程,但我无法做任何想要的事情。我只想知道如何才能实现这一点,以便只运行一分钟的线程,并在线程中我想做我的事情!但是怎么样?我错了这种方法吗?如果,是的那么什么应该是正确的方法?
答案 0 :(得分:4)
做你想做的事的最简单方法是拥有如下内容:
public void run() {
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() < startTime + 60000) {
// do something useful
}
}
“做一些有用的事情”应该是一个快速的操作,你的线程将持续稍长于1分钟(1分钟+“做一些有用的”时间)。
注意你的原始代码:从线程本身停止一个线程,不需要中断:你只需要从run()
方法返回。
答案 1 :(得分:2)
为了确保你的线程能够工作1分钟,你需要为它创建单独的线程。
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
new Frame2().setVisible(true);
final Thread t=new Thread(new Frame2());
t.start();
new Thread(new Runnable() {
@Override
public void run() {
TimeUnit.SECONDS.sleep(1);
t.interrupt();
}
}).start();
}
现在看看你的“t”线程在做什么,它将在1分钟后被杀死。