java - 如何诊断无效线程访问 SWTException?

标签 java eclipse eclipse-rcp

我们正在为客户定制一个基于 Eclipse RCP 的工具。他们无法将它加载到他们的一台计算机上(它可以在其他计算机上运行)并提供了以下错误日志。

!SESSION 2009-01-23 12:09:05.593 ----------------------------------------------- eclipse.buildId=unknown java.version=1.5.0_12 java.vendor=Sun Microsystems Inc. BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_GB Command-line arguments: -os win32 -ws win32 -arch x86

!ENTRY org.eclipse.osgi 4 0 2009-01-23 12:09:07.500 !MESSAGE Bundle com.yantra.yfc.rcp.desktop.ri not found.

!ENTRY org.eclipse.osgi 4 0 2009-01-23 12:09:11.906 !MESSAGE Application error !STACK 1 org.eclipse.swt.SWTException: Invalid thread access at org.eclipse.swt.SWT.error(SWT.java:3374) at org.eclipse.swt.SWT.error(SWT.java:3297) at org.eclipse.swt.SWT.error(SWT.java:3268) at org.eclipse.swt.widgets.Display.error(Display.java:978) at org.eclipse.swt.widgets.Display.checkDevice(Display.java:638) at org.eclipse.swt.graphics.Device.dispose(Device.java:261) at com.yantra.yfc.rcp.YRCApplication.run(YRCApplication.java:176) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334) at org.eclipse.core.launcher.Main.basicRun(Main.java:278) at org.eclipse.core.launcher.Main.run(Main.java:973) at org.eclipse.core.launcher.Main.main(Main.java:948)

我用谷歌搜索了异常,但这似乎主要发生在人们尝试使用不同线程开发应用程序时。由于我们在任何其他计算机上都没有看到这个问题,所以我不知道是什么原因造成的。

这一定是有问题的机器上的配置问题,因为代码来自供应商(因此可能经过了很好的测试)并且可以在我们测试过的所有其他机器上运行。

有人对那台计算机的问题背后的原因有什么建议吗?或者关于可能揭示问题的调查路线的建议?

最佳答案

Eclipse 中只有一个 UI 线程。简而言之,规则是:

  • 如果您作为 UI 操作(例如事件处理程序、 View 初始化)的一部分被调用,您就在 UI 线程中。
  • 调用 UI 的所有其他操作(例如,需要显示对话框或将信息发送到修改小部件的 View 的作业)- 需要与 UI 线程同步。

这基本上是这样完成的:

 Display.getDefault().syncExec( new Runnable() {  public void run() { } });

您的代码进入运行方法。您还可以使用 asyncExec 方法继续操作,而无需等待 UI 完成。

尝试使用上面的代码片段来包装有问题的代码。

编辑: 片段中缺少 Runnable() 的结束括号。添加片段后工作正常。

关于java - 如何诊断无效线程访问 SWTException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/511317/

相关文章:

java - 在 eclipse 插件中打开资源对话框

eclipse - 在 Eclipse 中更快地编写代码的技巧是什么?

Eclipse RCP :- If a view contains huge selection like 4000 objects then applications takes time to show context menus

java - 如何为我的 Eclipse RCP 4 应用程序创建自定义命令?

java - 在 Java EE 中实现全文搜索

java - 为什么这种排序可视化这么慢?

java - 多态性如何与 Gson 一起工作(改造)

Java:我们可以毫无问题地重用 MBeanServerConnection 吗?

java - Eclipse插件开发: multipage editor with html extension

java - 如何在 Eclipse RCP 中使用非插件项目和插件项目?