2

クライアント用に Eclipse RCP ベースのツールをカスタマイズしています。彼らは自分のコンピューターの 1 つにそれをロードするのに問題があり (他のコンピューターでは動作します)、次のエラー ログを提供しています。

! セッション 2009-01-23 12:09:05.593 -------------------------------------- --------- eclipse.buildId=unknown java.version=1.5.0_12 java.vendor=Sun Microsystems Inc. BootLoader 定数: OS=win32、ARCH=x86、WS=win32、NL=en_GB コマンドライン引数: -os win32 -ws win32 -arch x86

!ENTRY org.eclipse.osgi 4 0 2009-01-23 12:09:07.500 !MESSAGE バンドル com.yantra.yfc.rcp.desktop.ri が見つかりません。

!ENTRY org.eclipse.osgi 4 0 2009-01-23 12:09:11.906 !MESSAGE アプリケーション エラー !STACK 1 org.eclipse.swt.SWTException: org.eclipse.swt.SWT.error(SWT.error(SWT. java:3374) org.eclipse.swt.SWT.error(SWT.java:3297) で org.eclipse.swt.SWT.error(SWT.java:3268) で org.eclipse.swt.widgets.Display.error (Display.java:978) org.eclipse.swt.widgets.Display.checkDevice(Display.java:638) で org.eclipse.swt.graphics.Device.dispose(Device.java:261) で 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 org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher の .runApplication(EclipseAppLauncher.java:92)。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) sun.reflect.NativeMethodAccessorImpl.invoke0 (ネイティブ メソッド) で sun.reflect.NativeMethodAccessorImpl.invoke (不明なソース) で sun.reflect.DelegatingMethodAccessorImpl.invoke (不明なソース) で java.lang.reflect.Method.invoke (不明なソース) org.eclipse.core.launcher.Main.invokeFramework(Main.java:334) で org.eclipse.core.launcher.Main.basicRun(Main.java:278) で org.eclipse.core.launcher.Main.run (Main.java:973) org.eclipse.core.launcher.Main.main(Main.java:948) でcore.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke(不明なソース) の sun.reflect.DelegatingMethodAccessorImpl.invoke(不明) 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) org.eclipse.core.launcher.Main.run(Main.java:973) で org.eclipse.core.launcher.Main.main(Main.java:948) でcore.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke(不明なソース) の sun.reflect.DelegatingMethodAccessorImpl.invoke(不明) 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) org.eclipse.core.launcher.Main.run(Main.java:973) で org.eclipse.core.launcher.Main.main(Main.java:948) でorg.eclipse.core.launcher.Main.invokeFramework(Main.java:334) の java.lang.reflect.Method.invoke(不明なソース) での invoke(不明なソース) org.eclipse.core.launcher.Main.basicRun での(Main.java:278) org.eclipse.core.launcher.Main.run(Main.java:973) で org.eclipse.core.launcher.Main.main(Main.java:948) でorg.eclipse.core.launcher.Main.invokeFramework(Main.java:334) の java.lang.reflect.Method.invoke(不明なソース) での invoke(不明なソース) org.eclipse.core.launcher.Main.basicRun での(Main.java:278) org.eclipse.core.launcher.Main.run(Main.java:973) で org.eclipse.core.launcher.Main.main(Main.java:948) で

私は例外をグーグルで調べましたが、これは主に人々が異なるスレッドを使用してアプリケーションを開発しようとしたときに発生するようです. この問題は他のコンピュータでは見られないため、何が原因なのかわかりません。

コードはベンダーからのものであり(おそらく十分にテストされている)、テストした他のすべてのマシンで動作するため、問題のマシンの構成の問題であるに違いありません。

そのコンピュータの問題の背後にあるものについて何か提案はありますか? または、問題を明らかにする可能性のある一連の調査についての提案はありますか?

4

4 に答える 4

11

Eclipse には UI スレッドが 1 つしかありません。簡単に言えば、ルールは次のとおりです。

  • UI 操作 (イベント ハンドラー、ビューの初期化など) の一部として呼び出された場合は、UI スレッドにいます。
  • UI を呼び出す他のすべての操作 (たとえば、ダイアログを表示したり、ウィジェットを変更するビューに情報を送信したりする必要があるジョブ) は、UI スレッドと同期する必要があります。

これは基本的に次のように行われます。

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

あなたのコードは run メソッドに入ります。メソッドを使用しasyncExecて、UI の終了を待たずに続行することもできます。

上記のスニペットを使用して、問題のあるコードをラップしてみてください。

編集: Runnable() の終了ブラケットがスニペットにありませんでした。スニペットを追加した後は正常に動作します。

于 2009-02-04T18:30:49.167 に答える
1

The Official Eclipse FAQsでも答えを見つけることができます。特に: Why do I get an invalid thread access exception?

于 2009-02-04T18:40:52.437 に答える