我已经实现了一个独立的java应用程序,它使用了用于GUI的swing框架。作为GUI的一部分,有一个JTextArea,它出现在点击一个按钮后,一些文本在jtextarea中被附加到一个作业处理后background.I我正在使用SwingWorker库,因为我不希望我的jtextarea冻结应用程序并且它工作正常。所以工作代码位于覆盖的doInBackground内。
我面临的问题是当我将这个GUI应用程序作为Eclipse插件的一部分启动时。我已经使用我的swing应用程序构建了一个jar,并且我已经为Eclipse工作台添加了一个扩展。在应用程序启动时正确但当应用程序流程要调用swingworker时,这个特定的jtextarea是冻结的,没有任何反应。似乎没有调用我的Swingworker的doInBackground()函数内的代码。 我在eclipse pugin代码中启动应用程序,如下所示:
SwingUtilities.invokeLater(new Runnable() {public void run() {
new MainFrame.setVisible(true);
}
});
其中MAinFrame是java程序的JFrame类。 你知道为什么会这样吗?
答案 0 :(得分:1)
在同一过程中混合使用SWT和AWT / Swing UI并不容易。它们需要不同的事件循环。您的代码冻结,因为Awt / Swing事件循环未在Eclipse进程中运行。您可以在SWT中重新编写UI或研究SWT-AWT桥。这座桥“工作”,但有很多故障。它实际上只适用于存在大量AWT / Swing的情况,并且在将UI移植到SWT时需要临时解决方案。
答案 1 :(得分:0)
您是否尝试过使用Runtime.exec()调用外部程序?
您可能知道,混合Eclipse SWT / Jface和Swing是一个难题。