1

我有一个没有 gui 的操作类。该课程主要进行数据管理。该类是从我的主 GUI 中的方法调用的。我遇到的问题是在出现故障时向用户显示消息。我正在使用MessageDialog,但它在运行时一直失败。我认为问题在于壳牌。当我尝试null用作外壳时。

MessageDialog.openError(null, "Printer Error Message", "Error getting print reply file.");

错误是空指针异常

MessageDialog.openError(Display.getCurrent().getActiveShell() etc

错误是空指针异常

MessageDialog.openError(Display.getDefault().getActiveShell()

错误是无效的线程访问

  1. 由于这不是 GUI 类,我是否必须从 GUI 父级传入 shell?
  2. 我可以在课堂上创建一个外壳然后使用它吗?
4

3 回答 3

5

您可以使用或修复ERROR_THREAD_INVALID_ACCESS错误。尝试:Display.syncExecDisplay.asyncExec

Display.syncExec(new Runnable() {
    void run() {
        MessageDialog.openError(Display.getDefault().getActiveShell()...
    }
}
于 2012-09-21T18:22:55.437 回答
3

这将做你想要的:

MessageDialog.openError(new Shell(), "Printer Error Message", "Error getting print reply file.");

只需创建一个新的Shell并将其传递给MessageDialog.

于 2012-09-21T18:20:14.637 回答
2

需要考虑的几个要点。

  1. 首先,不要将数据管理类(模型)与 UI 混合。
  2. 有一个实用程序类和方法来显示错误/信息消息。
  3. 始终在 UI 线程中访问 UI 小部件。使用Display.getDefault().asyncExec()syncExce()
  4. 先检查是否Display.getDefault().getActiveShell()将其传递给对话框,如果为空,则创建一个并传递它。
于 2012-09-21T19:28:14.347 回答