• ベストアンサー
  • 暇なときにでも

SWTでWindowsアプリケーションをつくりたい

  • 質問No.2457294
  • 閲覧数8204
  • ありがとう数4
  • 回答数2
こんにちは、私初心者ですが、是非ご指導を宜しくお願いします。
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

といったエラーになります。どなたかご回答を宜しく。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 39% (43/110)

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 はセキュリティ上の観点から、おすすめできません。
お礼コメント
noname#20524
早速試してみます。
bnosuke-x 様
完璧に近い回答ありがとうございます。 
投稿日時:2006/10/14 11:43

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 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もご参考下さい。
補足コメント
noname#20524
マニフェストは、
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
投稿日時:2006/10/10 10:19
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ