我已经实现了一个独立的java应用程序,它使用GUI的swing框架。作为GUI的一部分,有一个JTextArea,它在单击按钮后出现,并且在处理作业后在jtextarea中附加一些文本我正在使用 SwingWorker 库,因为我不希望我的 jtextarea 卡住应用程序并且它工作得很好。所以作业代码位于重写的 doInBackground 内。
我面临的问题是当我作为 Eclipse 插件的一部分启动这个 GUI 应用程序时。我已经用我的 swing 应用程序构建了一个 jar,并且向 Eclipse 工作台添加了一个扩展。一开始应用程序启动了正常,但是当应用程序流程到达调用 swingworker 时,这个特定的 jtextarea 被卡住并且没有任何反应。看来我的 Swingworker 的 doInBackground() 函数内的代码没有被调用。 我在 eclipse pugin 代码中启动应用程序,如下所示:
SwingUtilities.invokeLater(new Runnable() {public void run() {
new MainFrame.setVisible(true);
}
});
其中MAinFrame是java程序的JFrame类。 你知道为什么会这样吗?
最佳答案
在同一进程中混合 SWT 和 AWT/Swing UI 并不容易。它们需要不同的事件循环。您的代码卡住是因为 Awt/Swing 事件循环未在 Eclipse 进程中运行。您可以使用 SWT 重写 UI 或研究 SWT-AWT 桥接器。这座桥“可以工作”,但存在许多故障。它实际上只适用于 AWT/Swing 数量巨大且需要临时解决方案而将 UI 移植到 SWT 的情况。
关于java - 为什么 Eclipse 插件代码无法从外部 java swing 应用程序调用 swingworking 线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5469972/