java.lang.NoClassDefFoundErrorとは?Linuxサーバーでのエラー解決方法を教えてください

このQ&Aのポイント
  • Windows環境で正常に動作したサーバー(マルチスレッド)とクライアントのプログラムが、Linuxサーバーで実行するとjava.lang.NoClassDefFoundErrorという例外が発生します。
  • クラスの定義が見つからないとのエラーメッセージが表示されるが、ソースにはしっかり定義されていると思われます。
  • java -classpath . HelloWorldMultiThreadServerなどで実行しても同じエラーが発生するため、解決方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

java.lang.NoClassDefFoundError

こちらの http://www.hellohiro.com/socket.htm サーバー(マルチスレッド)とクライアントのプログラムを Windows環境でサーバーのアドレスを"localhost"にして一台のPC上で実行したところ うまくいったのですが 今度はサーバー側のプログラムをlinuxサーバーにおいてアドレスを指定して行ったところ コンパイルは正常に行えて(classファイルは作成されました)、実行するとクライアントからの接続までは うまくいくのですが ("172.0・・・ から接続がありました"とは表示されます) その後通信が切れてしまい Exception in thread "main" java.lang.NoClassDefFoundError: Connect という例外が起きてしまいます。 過去ログなどを調べたところクラスの定義が見つからないとのことなのですがソースにはしっかり定義されていると思います またサーバーのプログラムの実行を java -classpath . HelloWorldMultiThreadServer などでも行ってみましたが同じ状況になってしまいます どなたか是非アドバイスをいただけないでしょうか よろしくお願い致します

  • Java
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • same_goo
  • ベストアンサー率50% (2/4)
回答No.1

linux側でjava -versionを叩いて、1.4と出ますよね? コンパイル時と実行時のJavaバージョンが異なっていたり しないでしょうか? 私は、下記のようなシェルを作成して問題なく動作してます。 クラスパスも指定無しですので、Java1.4で JAVA_HOMEの設定があれば大丈夫だと思います。 ※JAVA_HOMEの設定が無いとjava.net.*等のライブラリに パスが通らないかもしれないです。(たぶん。。。) #!/bin/sh JAVA_HOME=/opt/java1.4 echo $JAVA_HOME PATH=$JAVA_HOME/bin:$PATH echo $CLASSPATH java -version javac HelloWorldSocketServer.java java HelloWorldSocketServer 例外のスタックトレースをもっと付けてもらえると 良いのですが・・・ Exception in thread "main" java.lang.NoClassDefFoundError: Connectの続きを

alice-su
質問者

お礼

>コンパイル時と実行時のJavaバージョンが異なっていたり しないでしょうか? 正にそれでした! 両方ともver1.5でしたがwinで作成したclassファイルを持ってきていたためlinux側でちゃんとjavaファイルからコンパイルしたところ一部文字コードのマッピングエラーが出たため日本語をすべて削除して実行したところうまくいきました。 linuxの環境は自分で設定したわけではないことと(レンタル) 環境がIPv6であることでそこらへんに原因があるかと思ってずっと ソースと睨めっこをしていました 自分の周りにjavaをやっている人がいなくてずっと悩んでいました 本当に感謝いたします、ありがとうございました。

alice-su
質問者

補足

一応下の内容に補足ですが マルチスレッドではない方のサーバープログラムは Classファイルだけで動いてました、なぜか日本語も大丈夫だったし 不思議です・・・

関連するQ&A

  • java.lang.NoClassDefFoundError。。。

    どうぞ知恵をお貸しください。 ・jdk-1.5.0.16 ・mysql-4.0.26-win32 ・mysql-connector-java-3.1.14 ・eclipse 3.2.0 をダウンロード、インストールしてjavaの勉強を行っています。 コマンドプロンプトよりコンパイルを成功した場合は実行時に下記のエラーが、 Exception in thread "main" java.lang.NoClassDefFoundError コンパイルに失敗した場合は「読み込めません」のエラーが出力されます。 環境変数でCLASSPATHも設定してありますが、あえて実行時にclasspathを指定しても試みてみましたがエラーは変わりません。 何が原因なのでしょうか? どうぞご指導をよろしくお願いします。 エラー全文 Exception in thread "main" java.lang.NoClassDefFoundError: sample (wrong name: mypackage/sample) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source)

  • Exception in thread "main" java.lang.NoClassDefFoundError: Hello

    Javaでコンパイルは通るのですが、実行すると。 Exception in thread "main" java.lang.NoClassDefFoundError:Hello が出ます。 色々調べて、「java -classpath . Hello」または「set classpath=.;%classpath%」とすると実行できることが分かりました。 以前は、このような入力をしなくても実行できたのですが、何が原因なのでしょうか? また、この「Classpath」とは何ですか? 環境設定をするとコマンドラインからの実行ファイル名を入力するだけで実行できる(あってるのかな?)事は分かりますが、これは何なのでしょうか?環境設定とは異なる話なのでしょうか?

  • Exception in thread "main" java.lang.NoClassDefFoundError: helloworldで困っています

    Exception in thread "main" java.lang.NoClassDefFoundError: helloworldと出てJAVAが実行できません。どうしたらよいのでしょうか。以前もこういう質問をしたのですが、またなってしまいました。 CLASSPATHの設定とかもしてみようといろいろと試行錯誤したのですが、だめでした。どういう設定にすればよいかもわかりません。 どうにかして、 java HelloWorld で実行できるようになりませんか? JAVAのSDKをインストールした場所は C:\j2sdk1.4.0 です。コンパイルはできます。 OSはWindowsXPです。初心者ですが、どうかよろしくお願いします。

  • java.lang.NoClassDefFoundErrorというエラーが出ます その2

    ご質問させて頂きます。 java.lang.NoClassDefFoundErrorというエラーが出ます http://oshiete1.goo.ne.jp/kotaeru.php3?q=952983 の続きの質問なんですが・・・。 次のような実行時エラーが出ます。 java.lang.ClassNotFoundException: org.postgresql.Driver at java.net.URLClassLoader$1.run(URLClassLoader.java:198) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:186) at java.lang.ClassLoader.loadClass(ClassLoader.java:299) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265) at java.lang.ClassLoader.loadClass(ClassLoader.java:255) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:315) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:140) at sample1.main(sample1.java:8) そこで、 >PostgreSQLのODBCドライバをCLASSPATHに含めていますか? >postgresql.jarとかpg72jdbc2.jarといったファイルがどこかにあるはずです. と、回答者の方からアドバイスをして頂きました。 ところが、postgresql.jarとかpg72jdbc2.jarもありませんでした。 ネットで検索をしたところ、「postgresql743.jar」というのがありましたので /usr/javaに格納しました。 /etc/profileに、 export PATH=$PATH:/usr/java export CLASSPATH=$CLASSPATH:/usr/java. と追加しました。 しかし、同じエラーが出てします。 対処方法をご存じでしたら、ご教授して頂けたら幸いです。

    • ベストアンサー
    • Java
  • NoClassDefFoundErrorについて

    こんにちは。 http://research.nii.ac.jp/~uno/codes-j.htm の中段ほどにあるFREQTというプログラム http://research.nii.ac.jp/~uno/code/FREQT_distMay02_j50.tar.gz を実行しようと思い、解凍・makeによるコンパイルは完了して、さあ実行しようとすると、 Exception in thread "main" java.lang.NoClassDefFoundError: org/openxml/parser/HTMLparser と実行途中に出てしまいます。 HTMLparser.classが入っているopenxml.jarに対するclasspathは、make中に入っていると思うのですが・・・うまくいきません。 どうか助けてください。

    • ベストアンサー
    • Java
  • Javaプログラミングが実行できない

    javaの勉強を始めようと考え勉強しているのですが、いきなりつまずいて困っています。 コンパイラし、dirを打ったあとプログラムを実行すると Exception in thread "main" java.lang.NoClassDefFoundError: Sample01 と表示され実行できません。 アドバイスお願いします。

    • ベストアンサー
    • Java
  • NoClassDefFoundError??

    Javaを勉強している学生です。 学校でJavaをやっていて、家もでもJavaの開発環境を整えようとしているのですが エラーが出てしまい困っています。 sunのページからJDK5.0をダウンロードし インストールは成功しました。 コマンドプロンプトの環境変数もセットしましたが (プログラム名をHellowWorldとすると) HellowWorld.javaと打ち込んだところ 「有効なWin32アプリケーションではありません」 と表示され java HellowWorldと打ち込むと 「Exception in thread "main" java.lang.NoClassDefFoundError と表示されてプログラムが動きません。 このエラーの意味が分からず困っています。 どなたか分かる方、回答お願いします。

    • ベストアンサー
    • Java
  • Java実行でのエラー

    Javaを勉強したいのでインストールしてみたところまでは良かったのですがコンパイルを通した後に実行すると動きません。 CLASSPATH:c:\Java JavaファイルがJavaフォルダの中に入っている状態です。 【手順】 c:\Java>java HelloJava.java ↓コンパイル成功 c:\Java>java HelloJava Exception in thread "main" java.lang.NoClassDefFoundError: HelloJava というエラーが出てJavaを実行できません。 エラーの内容がわかる方はがいらっしゃれば教えて頂きたいです。

    • ベストアンサー
    • Java
  • javaの実行環境

    javaの勉強をしようと思い、以下のhelloworldコードを書いてみました。 public class HelloWorld { public static void main(String[] args) { System.out.print("Hello World\n"); } } それを、以下のようにlinux環境(ubuntu 10.10)でコンパイル実行しようとしたのですが、 javac HelloWorld.java java HelloWorld.class Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。そこで色々調べて jar cvmf manifest.mf test HelloWorld.class とjarファイルを作成して実行したところ、適切に"Hello World"が表示されました。 (manifest.mfの中身は"Main-Class: HelloWorld"1行だけです。) その後、このjarファイルをwindows環境に持っていって実行したのですが、 Exception in thread "main" java.lang.NoClassDefFoundError: ・・・ と怒られてしまいました。 linux環境で、"echo $CLASSPATH"を実行しても何も表示されず、CLASSPATHはどこにも通っていないようです。 また、windows環境のDOS画面にてSETを実行し、環境変数を表示させてもCLASSPATHはありませんでした。(javaはインストール済みです。) で、質問です。 1)なぜjarにすると実行でき、classファイルのままでは実行出来なかったのでしょうか? 2)windows環境で、CLASSPATHを設定したほうが良いのでしょうか?設定する場合は、prgramfiles\java\binで良いのでしょうか? 以上、長くなり申し訳ないのですが、よろしくお願いします。

    • ベストアンサー
    • Java
  • Java起動・・・?

    学校でJavaの勉強をしています。 そこで家でもやってみようと思い学校と同じやり方をしたのですが起動?しません。 コマンドプロンプトで実行しているのですが、 Exception in thread "main" java.lang.NoClassDefFoundErrorと出ます。 どのようにすれば出来るようになりますか?

    • ベストアンサー
    • Java

専門家に質問してみよう