按钮上的 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()