嘿,我只需要回答一个问题…我将如何使以下代码不冻结整个JFrame?
try {
Thread.sleep(Integer.parseInt(delayField.getText()) * 1000);
System.out.println("Hello!");
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
使用其他线程来执行此任务。如果在主UI线程中执行此操作,则它将冻结。例如,您可以执行以下操作
new Thread() {
@Override
public void run() {
try {
Thread.sleep(Integer.parseInt(delayField.getText()) * 1000);
System.out.println("Hello!");
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}.start();
更新
在对Robin和Marko提出明智建议之后,我正在用更好的解决方案来更新答案。
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.out.println("Hello!");
}
};
javax.swing.Timer t = new javax.swing.Timer(Integer.parseInt(delayField.getText()) * 1000, taskPerformer);
t.setRepeats(false);
t.start();
如果注释掉,框架显示得很好。 我还应该做什么来显示文件选择器?
问题内容: 我开发汽车管理系统程序。然后,我想在汽车进出时将邮件发送给该公司的所有者。我的代码可以成功发送邮件,但是我注意到在发送邮件时,其他JFrame窗口被冻结(我无法在所有JFrame窗口上执行任何操作),直到完成邮件发送为止。这通常用于Javamail还是有办法使其他JFrame仍然正常工作? 在我的程序中,大约需要10秒钟才能完成发送一封邮件。 问题答案: 当您执行繁重的任务时,应在另一
问题内容: 如何在不冻结程序的情况下用Java执行进程?我已经尝试过使用SwingWorker,但是我还不太了解它是如何工作的。 我还有其他方法可以做到这一点吗?我想在我的JDroidLib中使用类似的东西。有关完整的源代码,请查看GitHub:http : //github.com/Team-M4gkBeatz/JDroidLib 提前致谢! 编辑: 感谢您的回答。但是我有一个带有几种方法的类(
我的包含一个嵌入的单个图形(Graphstream),当我尝试在调用Thread的循环中更新它时会冻结。我尝试在独立图形(显示在它自己的)上使用相同的更新,它按预期工作。 我在JFrame中嵌入了一个图,如下所示(AppGraph.java): 然后在JFrame类中调用它,如下所示: 上有用于不同搜索算法(如BFS)的按钮。在执行这些算法期间,以固定的时间间隔对遍历的边着色,以创建一种动画效果,
我有一个带有“开始”按钮和进度条的小型GUI测试。期望的行为是: 单击开始 Progressbar振荡5秒 进度条停止 观察到的行为是“开始”按钮冻结5秒钟,然后显示进度条(无振荡)。 以下是我目前的代码: 根据Bryan Oakley提供的信息,我知道我需要使用线程。我试着创建一个线程,但我猜,由于线程是从主线程中开始的,所以没有帮助。 我的想法是将逻辑部分放在一个不同的类中,并从该类中实例化G
问题内容: 我有一个带有“开始”按钮和进度条的小型GUI测试。所需的行为是: 点击开始 进度条振荡5秒钟 进度栏停止 观察到的行为是“开始”按钮冻结5秒钟,然后显示进度条(无振荡)。 到目前为止,这是我的代码: 根据Bryan Oakley 在此提供的信息,我了解我需要使用线程。我尝试创建一个线程,但是我猜测由于该线程是从主线程中启动的,因此没有帮助。 我有想法放置在不同的类中的逻辑部分,以及从该