SWT - MessageDialog - 贝壳

时间:2012-09-21 17:56:45

标签: java dialog swt

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

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. 我可以在类中创建一个shell然后使用它吗?

3 个答案:

答案 0 :(得分:6)

您可以使用Display.syncExecDisplay.asyncExec解决ERROR_THREAD_INVALID_ACCESS错误。试试:

Display.syncExec(new Runnable() {
    void run() {
        MessageDialog.openError(Display.getDefault().getActiveShell()...
    }
}

答案 1 :(得分:3)

这将做你想要的:

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

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

答案 2 :(得分:2)

很少有重要的考虑因素。

  1. 首先,不要将数据管理类(模型)与UI混合使用。
  2. 有一个实用程序类和方法来显示错误/信息消息。
  3. 始终在UI线程中访问UI小部件。使用Display.getDefault().asyncExec()syncExce()
  4. 选中Display.getDefault().getActiveShell()将其传递给。{ 首先是对话框,如果是null,则创建一个并传递它。