我有一个简短的问题版本:
- 我开始这样的线程:
counter.start();
,counter
线程在哪里。 - 当我想停止线程时,我会这样做:
counter.interrupt()
- 在我的线程中,我会定期进行此检查:
Thread.interrupted()
. 如果它从线程中给出true
Ireturn
,因此它会停止。
如果需要,这里有一些细节:
如果您需要更多详细信息,它们就在这里。从 invent 调度线程我以这种方式启动一个计数器线程:
public static void start() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
showGUI();
counter.start();
}
});
}
线程的定义如下:
public static Thread counter = new Thread() {
public void run() {
for (int i=4; i>0; i=i-1) {
updateGUI(i,label);
try {Thread.sleep(1000);} catch(InterruptedException e) {};
}
// The time for the partner selection is over.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.remove(partnerSelectionPanel);
frame.add(selectionFinishedPanel);
frame.invalidate();
frame.validate();
}
});
}
};
该线程在“第一个”窗口中执行倒计时(它显示回家还有很多时间)。如果时间限制结束,线程关闭“第一个”窗口并生成一个新窗口。我想通过以下方式修改我的线程:
public static Thread counter = new Thread() {
public void run() {
for (int i=4; i>0; i=i-1) {
if (!Thread.interrupted()) {
updateGUI(i,label);
} else {
return;
}
try {Thread.sleep(1000);} catch(InterruptedException e) {};
}
// The time for the partner selection is over.
if (!Thread.interrupted()) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.remove(partnerSelectionPanel);
frame.add(selectionFinishedPanel);
frame.invalidate();
frame.validate();
}
});
} else {
return;
}
}
};
添加:
由于某些原因,它不起作用。我有一个中断线程的方法:
public static void partnerSelected() {
System.out.println("The button is pressed!!!!");
counter.interrupt();
}
此方法在按下按钮时激活。当我按下按钮时,我会在终端中看到相应的输出(所以这个方法被激活并且它做了一些事情)。但是由于某些原因它不会中断线程。这是线程的代码:
public static Thread counter = new Thread() {
public void run() {
for (int i=40; i>0; i=i-1) {
if (Thread.interrupted()) {
System.out.println("Helloo!!!!!!!!!!!!!!!");
return;
}
updateGUI(i,label);
try {Thread.sleep(1000);} catch(InterruptedException e) {};
}
// The time for the partner selection is over.
if (Thread.interrupted()) {
System.out.println("Helloo!!!!!!!!!!!!!!!");
return;
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
frame.remove(partnerSelectionPanel);
frame.add(selectionFinishedPanel);
frame.invalidate();
frame.validate();
}
});
}
};
PS我没有看到“你好!!!!!!!!!!!!!” 在终端...