プロが教えるわが家の防犯対策術!

いつもお世話になっております。

メール配信のjavaプログラム実行時、以下のエラーが出ており、原因が分からず苦戦している状況です。
もし同じエラーで格闘し解決された経験のある方がいらっしゃいましたら、ご教授いただけると
幸いです。

以下の内容のバッチプログラムとし、Windowsのタスクスケジューラで実行しています。
C:\abc>cd C:\Program Files\Sample
C:\Program Files\Sample>java program.test1
Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Address
at program.test1.main(test1.java:131)

エラー箇所のtest1.javaの131行目は以下の一行です。
test1 mail = new test1();

以前はエラーが出なかったのですが、バージョンアップ等でコンパイルし直した後に発生
するようになりました。色々調べてみましたが、答えの核心に繋がるものが見つかりませんでした。
NoClassDefFoundError の javax/mail/Address はどのようなときに発生するものなのでしょうか。

A 回答 (2件)

エラーは、実行しているJavaVMからjavax.mail.Addressクラスが「見つからない」ので、


それが「見つかる」ようにすればいいわけです。
そのために「クラスパスを通す」必要があるわけですが、やり方として、
・実行時にパスを通す
・環境変数に指定する
という2つの方法があります。

JavaMailの場合、mail.jarとactivation.jarにクラスパスを通す必要があります。
例えば、これらのファイルがC:\javaフォルダに入っている場合
javac -classpath .;C:\java\mail.jar;C:\java\activation.jar program.test1
とすると、test1のプログラムを実行する時に2つのjarファイルにクラスパスが通り、
クラスが見つかるようになります。

ただ、いちいちこれをタイプして実行するのは面倒なので、一般には環境変数に追加します。
WindowsXPの場合、システムのプロパティの環境変数から、
CLASSPATHを選び(なければ新規作成またはPATHを選んでもいい)
値に、mail.jarとactivation.jarを(フルパスで)追加すればJavaVMからは常に、
このパスが「見つかる」ようになります。

参考URL:http://www.hellohiro.com/appli.htm
    • good
    • 0
この回答へのお礼

お礼が遅くなり、申し訳ありません。
お陰さまで、無事解決いたしました。システム環境変数内で activation.jar と mail.jar を
指定していましたが、途中のフォルダパスが間違っているのが原因でした。

なんともお恥ずかしい。この度は適格なアドバイスをいただき、
本当にありがとうございました。

お礼日時:2007/07/11 19:44

実行プログラムがjavax.mail.Addressクラスをロードできないために発生しています。


JavaMailにクラスパスが通っていないためでしょう。

> 以前はエラーが出なかったのですが、バージョンアップ等...
何をどのようにバージョンアップしたのでしょうか。
    • good
    • 0
この回答へのお礼

>>momozange様

早速の返信ありがとうございます。
バージョンアップはこのプログラムではありませんでした。
勘違いで申し訳ありません。無視してください。

重ねての質問となり恐縮ですが、この実行プログラムにJavaMailのクラス
パスを通すというのは具体的にどのようにすれば良いのでしょうか?
importで javax.mail.Address を記載するのでしょうか。それとも
環境変数等の設定が必要なのでしょうか。

お礼日時:2007/06/27 23:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!