【发布时间】:2011-09-24 03:15:19
【问题描述】:
我正在 Swing gui 中使用 Processing PApplet (http://processing.org/) 编写应用程序,这两者的婚姻并不幸福。我有一个 JButton 的监听器,它启动一个 Swing Worker 来运行一些长时间的计算,然后绘制结果。问题是只有计算在 Swing Worker 中运行,而不是在负责绘图的处理 Animation Thread 中运行,结果 gui 看起来像未被占用(进度条 em> 和 Jbutton generateProcessing 不忙),而实际上它仍在绘制一分钟左右。
在分析应用程序时,我可以看到 Swing Worker 线程正在运行计算,然后它消失了,done() 方法被执行并打印“Finished”消息到终端,然后 Animation Thread 立即启动(情节准备好后它不会关闭而是进入睡眠状态,但我猜这很好)。
预期的行为是在 Animation Thread 和 Swing 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();
}
}
【问题讨论】:
标签: java swing processing