gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:39:51 25 4
gpt4 key购买 nike

我们正在为客户定制一个基于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com