gpt4 book ai didi

java - 在 Swing 中将 AnimationThread 作为后台任务处理

转载 作者:行者123 更新时间:2023-11-30 09:47:54 25 4
gpt4 key购买 nike

我正在使用 Processing PApplet ( http://processing.org/ ) 在 Swing gui 中编写一个应用程序,这两者并不是幸福的结合。我有一个 JButton 的监听器,它启动一个 Swing Worker 来运行一些长时间的计算,然后绘制结果。问题是只有计算在 Swing Worker 中运行,而不是在负责绘图的 Processing Animation Thread 中运行,结果 gui 看起来没有被占用(进度条Jbutton generateProcessing 不忙),而实际上它仍在计划一分钟左右。

在分析应用程序时,我可以看到 Swing Worker 线程正在运行计算,然后它停止运行并执行 done() 方法并将“完成”消息打印到终端,然后 Animation Thread 立即启动(情节准备就绪后它不会关闭但会进入休眠状态,但我想这很好)。

预期的行为是在 Animation ThreadSwing Worker 作业都完成时调用 done() 方法。

我的监听器看起来像这样(timeSlicerToProcessing 是一个扩展 PApplet 的类)

private class ListenGenerateProcessing implements ActionListener {
public void actionPerformed(ActionEvent e) {

SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {

// Executed in background thread
public Void doInBackground() {

generateProcessing.setEnabled(false);
progressBar.setIndeterminate(true);

//omitted

timeSlicerToProcessing.setBurnIn(Integer
.valueOf(burnInParser.getText()));

timeSlicerToProcessing.Impute(); //lengthy computations

timeSlicerToProcessing.init();

return null;
}// END: doInBackground()

// Executed in event dispatch thread
public void done() {

System.out.println("Finished. \n");
generateProcessing.setEnabled(true);
progressBar.setIndeterminate(false);

}// END: done
};

worker.execute();
}
}// END: ListenGenerateProcessing

编辑:
处理是否在 draw() 方法中绘图,你不能直接调用它,据我所知,setup() 和 draw() 都在 init() 上调用

这基本上是这样的:

public class MyProcessingSketch extends PApplet { 
public void setup () {
size( 200, 200 );
background(100);
}

public void draw () {
drawStuff();
}
}

最佳答案

我看到的一个问题是这段代码:

generateProcessing.setEnabled(false);
progressBar.setIndeterminate(true);

应该在声明和启动 SwingWorker 之前 在 actionPerformed 方法中调用,因为它需要在 EDT 上调用。但是,您的代码片段没有向我们展示动画的完成位置,因此很难说它还有什么问题。

编辑:
根据您的最新评论(我已将其添加到您的原始帖子中),我仍然不确定问题出在哪里,主要是由于我对 pApplets 的工作方式一无所知,但是我想知道是否应该在 EDT 上调用 init 方法,也许在 SwingWorker 的 done 方法中。

关于java - 在 Swing 中将 AnimationThread 作为后台任务处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6503865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com