我正在编写一个java swing程序,它涉及使用线程来更新UI,
线程中的run
函数包含while循环和睡眠定时器
我希望在用户按下例如ctrl+c
时终止while循环或线程本身。该线程包含一个sleep命令,我不希望用户必须按住ctrl+c
才能终止,我只希望能够使用这些键一次。
这怎么可能?
public static void main(String[] args) {
.......//Code to set up window
Thread thread = new Thread(){
@Override
public void run() {
while(user has not terminated the program with ctrl+c){
//Do Something
try{
Thread.sleep(5000);
}catch(InterruptedException e){
}
}
}
};
.......//Code to start thread
}
答案 0 :(得分:2)
在Java中,线程是协同终止的。这意味着它需要修改线程内的代码以及线程外的代码。在线程外部,您可以使用Thread.interrupt()方法通知线程应准备关闭。在线程内部,您应该检查Thread.interrupted()以测试中断(如果是这种情况,则从循环中断)。您还应该修改您的异常处理程序;在线程处于休眠状态时调用Thread.interrupt()时抛出中断的异常,因此您应该修改该处理程序的内容以从循环中断开。
答案 1 :(得分:1)
尝试这样的事情
class A{
Thread r1Thread;
public static boolean isCtrlCPressed = false;
public static void main(String[] args) {
.......//Code to set up window
MyRun r1 = new MyRun();
r1Thread = new Thread(r1);
r1Thread.start();
}
public void someMethodThatDetectCtrlC(){
r1Thread.interrupt();
}
}
你的主题
class MyRun implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
try{
Thread.sleep(5000);
}catch(InterruptedException e){
}
}
}
答案 2 :(得分:-1)
制作名为“running”的布尔值
将while循环更改为while(running)
添加一个keylistener,让它听取Ctrl + C.
如果它听到Ctrl + C,请设置running = false。
由于运行== false,while循环将停止。