我正在使用按钮在我的应用中启动后台服务。这是我正在使用的代码:
@Override
public void actionPerformed(ActionEvent action) {
if (action.getActionCommand().equals("Start")) {
while (true) {
new Thread(new Runnable() {
public void run() {
System.out.println("Started");
}
}).start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
这会每秒更新一次服务,这就是我想要的。问题是它冻结了应用程序的其余部分。我如何实现它以便不会发生这种情况?
答案 0 :(得分:1)
以下内容可能会导致您的应用暂停:
while (true) {
...
}
尝试删除这些行。
编辑:根据注释,要使新启动的线程每秒触发一次,请在run()方法中移动sleep和while循环:
if (action.getActionCommand().equals("Start")) {
new Thread(new Runnable() {
public void run() {
while (true) {
System.out.println("Started"); }
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
答案 1 :(得分:0)
您在更新GUI的线程中调用此方法,这就是暂停GUI刷新。产生一个新线程并在那里执行。
答案 2 :(得分:0)
无限循环?
while (true) {.....}
你应该怎么离开这里 - 在循环内添加一个打印语句,你会发现你在点击按钮后被困在这里
答案 3 :(得分:0)
好的我明白了。这就是我应该做的:
@Override
public void actionPerformed(ActionEvent action) {
if (action.getActionCommand().equals("Start")) {
new Thread(new Runnable() {
public void run() {
while (true) {
System.out.println("Started");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}