4

免責事項

これは、.NET GUI が Java を回避しようとする典型的なケースです。

問題の説明:

JFace と SWT を使用して非常に単純な GUI を構築しようとしています。コードは単純です (チュートリアルがたくさんあります)。それほど単純ではないのは、JFace と SWT をプラグイン プロジェクトの外で動作させることができないように見えることです。

CLASSPATH に "C:/eclipse 3.5/plugins" を入れているので、プロジェクトで JFace と SWT を問題なく使用できると期待しています (私のコンピューターから --> プロパティ --> 高度な --> 環境変数)。そして、この記事の「SWT と JFace のインストール」ボックスに示されているように、PATH にあるすべての swt-*.dll (確かに、ローカル ユーザー パスとグローバル パスの両方) を見つけることができます。

問題は、ビルドパスからjarを直接参照しない限り、eclipse.orgから何もインポートできないことです->ライブラリ->外部jarを追加します(ビルドするには、次のjarを追加する必要があります:org.eclipse.swt .win32.win32.x86_3.5.1.v3555a.jarorg.eclipse.jface_3.5.1.M20090826-0800.jar )。これを行うと問題なくビルドできますが、「Java アプリケーション」として実行すると、次のエラーが発生します (別の方法で実行する必要がありますか?)。

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor
    at demo.ui.test.EntryPoint.main(EntryPoint.java:18)
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IProgressMonitor
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 1 more

ApplicationWindowこれをデバッグしようとしましたが、基本的に、クラス (org.eclipse.jface.window.ApplicationWindow)をインスタンス化しようとするとすぐにスローされます。エラーを再現しようとして、すべてのコードをコメントアウトし、メインで次のように置き換えたところ、最初の行で上記と同じエラーがスローされました。

ApplicationWindow w = new ApplicationWindow(null); //<-- error on this line
w.setBlockOnOpen(true);
w.open();
Display.getCurrent().dispose();

質問:

質問 1 : 上記のエラーを修正して (何が起こっているのか理解したいのですが) どうすれば実行できるようになりますか?

質問 2 : プロジェクトで jar が表示されないのはなぜですか?また、その作成方法は?

Java と Eclipse に慣れていないため、非常に些細なことを見落としている可能性があります。どんな助けでも大歓迎です!

編集:他の誰かが同じ問題を抱えているようです-> http://www.eclipsezone.com/eclipse/forums/t60528.html -彼らがどのように解決したかははっきりしていませんが、支援をお願いします

4

2 に答える 2

11

IProgressMonitor使用する2つのjarファイルではインターフェースを使用できません。また、クラスパスにorg.eclipse.equinox.commonプラグインを配置する必要があります。IProgressMonitorEclipse環境全体を実行せずに使用できます。

(これはあなたが参照している記事からの解決策です。私はもともとIProgressMonitorがorg.eclipse.core.runtimeプラグインにあると思っていましたが、バグ#122935で説明されているようにorg.eclipse.equinox.commonに移動されました)

于 2009-12-23T13:37:02.917 に答える
6

上記の Peter の指摘に呼応して、(特に JFace の場合) 実行するために、私は常にたくさんの JAR を追加する必要があります。通常、必要になります

./org.eclipse.core.commands_3.3.0.I20070605-0010.jar
./org.eclipse.core.runtime_3.3.100.v20070530.jar
./org.eclipse.equinox.common_3.3.0.v20070426.jar
./org.eclipse.jface_3.3.1.M20070910-0800b.jar
./org.eclipse.osgi_3.3.2.R33x_v20080105.jar
./org.eclipse.ui.forms_3.3.0.v20070511.jar

jarfinder などを使用して、どのファイルがどの JAR に存在するかを見つけることができます。Windowsでは、ファイルシステムのEclipseフォルダーの下にあるzip / jarファイルを検索するために検索機能を使用したことを覚えているようですIProgressMonitor.class-実際のJARを追跡するのが難しい場合があるためです。

私は通常、何が失敗したかを確認し、追跡してJARを追加し、すすぎ、繰り返します。

RCP/プラグインを実行すると、Eclipse が多くの問題を処理してくれるように思えます。独自のスタンドアロン アプリを実行すると、この余分な荷物が発生しますが、それに固執する場合は、適切なスタンドアロンのネイティブのような GUI があると非常に便利です。したがって、私は通常、バニラ (非プラグイン) Eclipse プロジェクトをセットアップし、これらの問題に直面することを余儀なくされます (JAR をクラスパスに手動で追加します)。また、プロジェクトを配布したい場合にも便利です。

于 2010-01-19T20:35:56.073 に答える