- ベストアンサー
明示的にコンパイルしてから実行するには
- java eclipse3.5を使ってプログラミングの勉強をしています。
- ThreadMain.javaというプログラムを動かすのにEchoProtocolFactoryとThreadPerDispatcher.javaとPoolDispatcher.javaを明示的にコンパイルする必要があるのです。
- Exception in thread "main" java.lang.ClassNotFoundException: EchoProtocolFactory これらのクラスが書かれたソースファイルはすべて同じsocket.110というパッケージに入っています。 このエラーを取り除くには、どうすればよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
細かい確認ですが、 > ThreadMain.javaというプログラムを動かすのにEchoProtocolFactoryと ThreadPerDispatcher.javaとPoolDispatcher.javaを明示的にコンパイ ルする必要があるのです。 エラーに出ているEchoProtocolFactoryだけ拡張子がないですが、ソースファイルではない、ということでしょうか? それともこれがファイル名そのものなんですか? ファイル名に拡張子がついてない、というオチだったりしないでしょうか。
その他の回答 (1)
- komi1341
- ベストアンサー率65% (25/38)
ThreadMain.javaには「package socket_110」という宣言がされていますが、他のクラスでも同じ宣言をしてありますか? ソースファイルの配置が適切かどうかは、ThreadMain以外のクラスがどのパッケージに属しているかで決まります。他のクラスもsocket_110パッケージに属する(そういうパッケージ宣言をしてある)のであれば、配置はおそらく合っています。 > socket.110というパッケージの中に、これら4つのソースファイルとこれらに関連したファイルが入っています。 用語も確認した方がよさそうですね。このsocket.110というのはパッケージではなく、Eclipse用のプロジェクト名では? Javaのパッケージの概念とは別物なので混同しないように気を付けてください。
お礼
回答ありがとうございます。知人に聞いて解決しました。次のように修正しました。 ProtocolFactory protoFactory = (ProtocolFactory) // プロトコルファクトリを取得する Class.forName(“socket_110.” + protocolName + "ProtocolFactory").newInstance(); Dispatcher dispatcher = (Dispatcher) // ディスパッチャを取得する Class.forName(“socket_110.” + dispatcherName + "Dispatcher").newInstance(); 解答していただいた方、ありがとうございました。
お礼
回答ありがとうございます。 >エラーに出ているEchoProtocolFactoryだけ拡張子がないですが、ソースファイルではない、 >ということでしょうか? それともこれがファイル名そのものなんですか? すみません、入力ミスです。正しくは、EchoProtocolFactory.javaで、 ちゃんとしたソースファイルです。 EchoProtocolFactory.javaとThreadPerDispatcher.javaとPoolDispatcher.javaの中には、それぞれEchoProtocolFactoryクラス、ThreadPerDispatcherクラス、PoolDispatcherクラスが定義されています。 参考書には「これらのクラスは、ThreadMain.javaの中で、名前により 参照されていないので、ThreadMainと一緒に自動的にコンパイルされな い。」とかかれています。よって、明示的にコンパイルしなくてはいけ ないとかかれています。 socket.110というパッケージの中に、これら4つのソースファイルとこれらに関連したファイルが入っています。 socket.110 -src --socket_110 ---EchoProtocolFactory.java,ThreadPerDispatcher.java,PoolDispatcher.java,ThreadMain.java,関連しているソースファイル EchoProtocolFactory.java、ThreadPerDispatcher.java、PoolDispatcher.javaを保存している場所がまずいのでしょうか?