お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2009-10-23 21:37:10

debukawa
新しいメンバ
登録日: 2009-09-27

ClassNotFoundExceptionエラーの解決方法

Ubuntu9.04にJava Eclipse3.5をいれて通信のプログラムを勉強しています。

ThreadMain.javaというサーバプログラムで、プログラムの引数は3つあり、を次のようにしています。
ポート番号、プロトコル名、ディスパッチャ名の3つです。

このプログラムは、他のソースファイルにかかれているプロトコルとディスパッチャのクラスを以下のように取得し処理を行います。

ProtocolFactory protoFactory = (ProtocolFactory)Class.forName(protocolName + "ProtocolFactory").newInstance();
Dispatcher dispatcher = (Dispatcher)Class.forName(dispatcherName + "Dispatcher").newInstance();

このプログラムを実行すると、
Exception in thread "main" java.lang.ClassNotFoundException: EchoProtocolFactory
    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)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at socket_110.ThreadMain.main(ThreadMain.java:22)

というエラーが生じます。調べてみると、このエラーはクラスが見つからないということだと分かりました。

socket.110
  --src
    --socket_110
      --ThreadMain.java
      --プロトコルのファイル
   --ディスパッチャのファイル

というように、ThreadMain.javaと同じ場所にはいっています。
場所が悪いのか、なにか設定をするのか、まったく分かりません。

どなたか教えていただけないでしょうか?お願いします。

オフライン

 

#2 2009-10-23 22:47:00

epii
メンバ
登録日: 2008-12-11

Re: ClassNotFoundExceptionエラーの解決方法

クラス名だけでなく、パッケージ名を付けてみてもだめですか?

Class.forName("socket_110." + protocolName + "ProtocolFactory")

オフライン

 

#3 2009-10-23 23:52:18

debukawa
新しいメンバ
登録日: 2009-09-27

Re: ClassNotFoundExceptionエラーの解決方法

回答ありがとうございました。

epiiさんのアドバイスどおりに試してみたところ、正常に起動しました。
助かりました。本当にありがとうございました。
また何かありましたら、質問させていただきますので、アドバイスよろしくお願いします。

オフライン

 

Board footer

Powered by FluxBB