按钮上的 JFrame ActionPerformed 需要全部时间才能完成代码
JFrame ActionPerformed on a button takes full time until it finishes the code
这是我第一次在 java 上制作 GUI,我有一个小问题很烦人。
我的代码看起来像这样。
private void RunButtonActionPerformed(java.awt.event.ActionEvent evt){
richText.append("Starting...");
try{ something happens here }
richText.append("Done...");
}
问题是,当我单击 运行 按钮时,它会一直等到完成任务并同时打印“正在开始...”和“完成...”。如何让它先打印“Starting”然后再打印“Done”?
此代码在美国东部时间执行,因此任何 UI 更改(在您的情况下为 richText.append)都将在它之后重新绘制。你应该在新线程中执行繁重的任务。
private void RunButtonActionPerformed(java.awt.event.ActionEvent evt){
richText.append("Starting...");
new Thread() {
public void run() {
try{ something happens here }
SwingUtilities.invokeLater(new Runnable() {
richText.append("Done...");
});
}
}.start();
}
或使用 SwingWorker 获得额外的功能,例如报告任务完成进度
我按照评论中的建议学习了 SwingWorker 的教程,并且成功了!它看起来像这样。
`private class Worker extends SwingWorker<Void, Void>{
protected Void doInBackground() throws Exception{
try{ things happen here }
return null;
}
@Override
protected void done(){
try{ get (); } catch (){}
}
}
要调用它,RunButtonActionPerformed
只需要 new Worker().execute()
。
这是我第一次在 java 上制作 GUI,我有一个小问题很烦人。
我的代码看起来像这样。
private void RunButtonActionPerformed(java.awt.event.ActionEvent evt){
richText.append("Starting...");
try{ something happens here }
richText.append("Done...");
}
问题是,当我单击 运行 按钮时,它会一直等到完成任务并同时打印“正在开始...”和“完成...”。如何让它先打印“Starting”然后再打印“Done”?
此代码在美国东部时间执行,因此任何 UI 更改(在您的情况下为 richText.append)都将在它之后重新绘制。你应该在新线程中执行繁重的任务。
private void RunButtonActionPerformed(java.awt.event.ActionEvent evt){
richText.append("Starting...");
new Thread() {
public void run() {
try{ something happens here }
SwingUtilities.invokeLater(new Runnable() {
richText.append("Done...");
});
}
}.start();
}
或使用 SwingWorker 获得额外的功能,例如报告任务完成进度
我按照评论中的建议学习了 SwingWorker 的教程,并且成功了!它看起来像这样。
`private class Worker extends SwingWorker<Void, Void>{
protected Void doInBackground() throws Exception{
try{ things happen here }
return null;
}
@Override
protected void done(){
try{ get (); } catch (){}
}
}
要调用它,RunButtonActionPerformed
只需要 new Worker().execute()
。