- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:java.lang.NoClassDefFoundError)
java.lang.NoClassDefFoundErrorとは?Linuxサーバーでのエラー解決方法を教えてください
このQ&Aのポイント
- Windows環境で正常に動作したサーバー(マルチスレッド)とクライアントのプログラムが、Linuxサーバーで実行するとjava.lang.NoClassDefFoundErrorという例外が発生します。
- クラスの定義が見つからないとのエラーメッセージが表示されるが、ソースにはしっかり定義されていると思われます。
- java -classpath . HelloWorldMultiThreadServerなどで実行しても同じエラーが発生するため、解決方法を教えていただけると助かります。
- みんなの回答 (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の続きを
お礼
>コンパイル時と実行時のJavaバージョンが異なっていたり しないでしょうか? 正にそれでした! 両方ともver1.5でしたがwinで作成したclassファイルを持ってきていたためlinux側でちゃんとjavaファイルからコンパイルしたところ一部文字コードのマッピングエラーが出たため日本語をすべて削除して実行したところうまくいきました。 linuxの環境は自分で設定したわけではないことと(レンタル) 環境がIPv6であることでそこらへんに原因があるかと思ってずっと ソースと睨めっこをしていました 自分の周りにjavaをやっている人がいなくてずっと悩んでいました 本当に感謝いたします、ありがとうございました。
補足
一応下の内容に補足ですが マルチスレッドではない方のサーバープログラムは Classファイルだけで動いてました、なぜか日本語も大丈夫だったし 不思議です・・・