0

我已经实现了一个独立的 Java 应用程序,它使用 GUI 的 swing 框架。作为 GUI 的一部分,有一个 JTextArea 在单击按钮后出现,并且在后台处理作业后在 jtextarea 处附加一些文本。我正在使用 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 类。你知道为什么会这样吗?

4

2 回答 2

1

在同一个进程中混合使用 SWT 和 AWT/Swing UI 并不容易。它们需要不同的事件循环。您的代码冻结,因为 Awt/Swing 事件循环未在 Eclipse 进程中运行。您可以在 SWT 中重新编写您的 UI 或研究 SWT-AWT 桥。这座桥“工作”,但有许多故障。它实际上只适用于有大量 AWT/Swing 并且在将 UI 移植到 SWT 时需要临时解决方案的情况。

于 2011-03-29T14:29:05.970 回答
0

你试过用 Runtime.exec() 调用你的外部程序吗?

您可能知道,将 Eclipse SWT/Jface 和 Swing 混合是一个困难的话题。

于 2011-03-29T09:14:13.610 回答