首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWT - MessageDialog壳

SWT - MessageDialog壳
EN

Stack Overflow用户
提问于 2012-09-21 17:56:44
回答 3查看 5.3K关注 0票数 1

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

代码语言:javascript
复制
MessageDialog.openError(null, "Printer Error Message", "Error getting print reply file.");

错误为空指针异常。

代码语言:javascript
复制
MessageDialog.openError(Display.getCurrent().getActiveShell() etc

错误为空指针异常。

代码语言:javascript
复制
MessageDialog.openError(Display.getDefault().getActiveShell()

错误是无效的线程访问。

  1. 由于这不是GUI类,我是否必须从GUI父类传入shell?
  2. 我可以在类中创建一个shell然后使用它吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-21 18:22:55

您可以使用ERROR_THREAD_INVALID_ACCESSDisplay.asyncExec修复Display.syncExec错误。试着:

代码语言:javascript
复制
Display.syncExec(new Runnable() {
    void run() {
        MessageDialog.openError(Display.getDefault().getActiveShell()...
    }
}
票数 5
EN

Stack Overflow用户

发布于 2012-09-21 18:20:14

这能做你想做的事:

代码语言:javascript
复制
MessageDialog.openError(new Shell(), "Printer Error Message", "Error getting print reply file.");

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

票数 3
EN

Stack Overflow用户

发布于 2012-09-21 19:28:14

很少有重要的问题需要考虑。

  1. 首先,不要将数据管理类(模型)与UI混在一起。
  2. 有一个实用工具类和方法来显示错误/信息消息。
  3. 始终在UI线程中访问UI小部件。使用Display.getDefault().asyncExec()syncExce()
  4. 检查Display.getDefault().getActiveShell(),首先将其传递给对话框,如果为null,则创建一个并传递它。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12535696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档