- ベストアンサー
SWTでWindowsアプリケーションをつくりたい
こんにちは、私初心者ですが、是非ご指導を宜しくお願いします。 Eclipseで簡易のブラウザーを作ったのですが、 それをJARファイルにまとめて、ダブルクリックしても、 could not find the main class. Program will exit という表示が出てしまいます。 また、コマンドプロンプトで、 C:\>java -jar miniBrowser.jar と入力すると、 Exception in thread "main" java.lang.NoClassDefFoundError : org/eclipse/swt/widgets/Composite といったエラーになります。どなたかご回答を宜しく。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1)jarファイルをダブルクリックするとcould not find the main class. Program will exit と表示されて実行されない 現象:jarファイルのマニフェスト(META-INF/MANIFEST.MF)で指定された実行開始クラスが見つからないため、エラーメッセージがでている。 原因:マニフェスト内のMain-Class属性で定義されているクラス名が間違っている。または、パッケージ名が省略されている。 対策: a.綴り違いを確認する(大文字小文字の違いも) 誤 example 正 Example b.パッケージ名を省略していないか確認する 誤 Example 正 myexample.swt.Example 補足 ・マニフェストでMain-Class属性の定義がされていない場合は別のエラーが表示されます。 ・クラス名について、jarファイルの仕様では、「クラスの相対パスを定義する」と書いてあります。 2)jarファイルを実行(java -jar swtAppli.jar)すると、 Exception in thread "main" java.lang.NoClassDefFoundError : org/eclipse/swt/xxxxx/xxxxxx というエラーがでる。 現象:JavaVM が swt に関するクラスを見つけられないため、エラーメッセージがでている。 原因:swt.jar 等(※1)がクラスの検索対象として指定されていない。または、lib/ext に入っていない。 ※1 swt.jar は org.eclipse.swt.win32.win32.x86_3.1.2.jar 等でも同様 対策: a.JavaVM の lib/ext ディレクトリ(JREのホーム/lib/extなど)に swt.jat を入れる 例 C:\Program Files\Java\jre1.5.0_08\lib\ext b.クラスパスで swt.jar を指定する ※ディレクトリ名でなく、jarファイルの名前をのものを指定することに注意。 以下クラスパスの指定方法。 b1.環境変数 CLASSPATH で指定する b2.マニフェスト内の Class-Path: で指定する b3.java コマンドで実行するとき -cp オプションで指定する 例 > java -cp "C:\eclipse\plugins\org.eclipse.swt.win32.win32.x86_3.1.2.jar" -jar swtAppli.jar 3)jar ファイルを実行(java -jar swtAppli.jar)すると、 Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-xxxx in java.library.path というエラーがでる。 ※(xxxx)はバージョン番号 現象:swt.jar 内のクラスから swt-win32-xxxx.dll を呼び出せないためエラーメッセージがでている。 原因:swt-win32-xxxx.dll ファイルが環境変数 PATH で指定されたディレクトリ、またはカレントディレクトリにない。 対策: a.カレントディレクトリ(jarと同じディレクトリ)に swt-win32-xxxx.dll ファイルを入れる b.PATH で指定されているディレクトリの何れかに swt-win32-xxxx.dllファイルを入れる c. swt-win32-xxxx.dll ファイルのあるディレクトリを PATH に加える d.java コマンドで実行するときに、swt-win32-xxxx.dllファイルのあるディレクトリを -Djava.library.path で指定する 例 > java -D java.library.path=C:\eclipse\plugins\org.eclipse.swt.win32_2.1.2\os\win32\x86 -jar swtAppli.jar ◆◆◆ セキュリティ上の注意 ◆◆◆ 対策2)の a,b1,、3)の b,c はセキュリティ上の観点から、おすすめできません。
その他の回答 (1)
- bnosuke
- ベストアンサー率21% (4/19)
推測で申し訳ないのですが、回答させていただきます。 エラー内容について (1)Exception in thread "main" java.lang.NoClassDefFoundError SWTのクラスが見つからない。 (2)could not find the main class. Program will exit jarファイルの中のmainがあるクラスを見つけられない(どこのクラスのmainを実行したらよいのかわからない) だと思います。 対策 (1) jarファイルを作るときに指定するパラーメータがおかしいかもしれません。 マニフェストで実行を開始するクラスを指定する必要があるはずです。 確認してください。 (2) 開発環境から離れてSWTを使ったアプリケーションを実行するために、規定の場所にjarだかDLLだかを入れなくてはならないと思います。 場合によっては環境変数の設定が必要かもしれません。 お手元の入門書で確認してください。 以上、経験はありませんが、エラーメッセージからの推測でした。 ご参考いただければ幸いです。 追記:参考URLもご参考下さい。
補足
マニフェストは、 Manifest-Version: 1.0 Main-Class: miniBrowser2 Class-Path: ./swt.jar ./rt.jar ./jsse.jar ./jce.jar ./charsets.jar ./dnsns.jar ./localedata.jar ./sunjce_provider.jar ./sunpkcs11.jar ./org.eclipse.swt.win32.win32.x86_3.1.1.jar ./swt-awt-win32-3139.dll ./swt-gdip-win32-3139.dll ./swtwin323139.dll ./org.eclipse.core.runtime_3.1.1.jar ./swt-gdip-win32-3139.dll ./org.eclipse.core.runtime_3.1.1.jar
お礼
早速試してみます。 bnosuke-x 様 完璧に近い回答ありがとうございます。