我有java方法执行一个很长的模型。大约需要20分钟。当我按下按钮时,按钮保持按下直到模型完成。我需要创建一个按钮,当按下它时,它会停止模型执行 到目前为止,我有2个按钮:停止和开始。我的问题是,当我按下开始按钮时,GUI中的所有按钮都会冻结,并且在模型完成之前无法按下
如何创建停止按钮?
谢谢,
约努茨
答案 0 :(得分:3)
您应该使用SwingWorker
。它们specifically designed用于执行远离EDT的长时间运行任务,同时仍然可以使用进度报告更新GUI。
答案 1 :(得分:2)
最好在单击按钮后启动一个线程。您可以制作一个停止按钮,如果尚未完成,则停止该线程。为此,您必须跟踪线程(例如在静态变量中)。
线程快速指南:http://www.tutorialspoint.com/java/java_multithreading.htm
请同时查看此内容:How to properly stop the Thread in Java?。
答案 2 :(得分:0)
如果您正在执行20分钟的任务以响应按钮单击,那么您可能应该在后台线程中执行此操作。
答案 3 :(得分:0)
您必须使用多线程。一个基本的例子 -
public class ThreadTest {
private int getSum(int x, int y){
return x + y;
}
public static void main(String args[]) {
ThreadTest tTest = new ThreadTest();
System.out.println(tTest.getSum(2, 5));
// Start the thread
new LongProcess().start();
// Since the thread sleeps for two seconds
// You will see 5 + 5 = 10 before Done! gets printed out
System.out.println(tTest.getSum(5, 5));
}
}
class LongProcess extends Thread {
public LongProcess(){
System.out.println("Thread started..");
}
public void run() {
try{
Thread.sleep(2000);
System.out.println("Done!");
} catch(InterruptedException iEx){
System.out.println(iEx.toString());
}
}
}