• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:明示的にコンパイルしてから実行するには)

明示的にコンパイルしてから実行するには

このQ&Aのポイント
  • java eclipse3.5を使ってプログラミングの勉強をしています。
  • ThreadMain.javaというプログラムを動かすのにEchoProtocolFactoryとThreadPerDispatcher.javaとPoolDispatcher.javaを明示的にコンパイルする必要があるのです。
  • Exception in thread "main" java.lang.ClassNotFoundException: EchoProtocolFactory これらのクラスが書かれたソースファイルはすべて同じsocket.110というパッケージに入っています。 このエラーを取り除くには、どうすればよいのでしょうか?

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

  • ベストアンサー
  • komi1341
  • ベストアンサー率65% (25/38)
回答No.1

細かい確認ですが、 > ThreadMain.javaというプログラムを動かすのにEchoProtocolFactoryと ThreadPerDispatcher.javaとPoolDispatcher.javaを明示的にコンパイ ルする必要があるのです。 エラーに出ているEchoProtocolFactoryだけ拡張子がないですが、ソースファイルではない、ということでしょうか? それともこれがファイル名そのものなんですか? ファイル名に拡張子がついてない、というオチだったりしないでしょうか。

debukawa
質問者

お礼

回答ありがとうございます。 >エラーに出ている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を保存している場所がまずいのでしょうか?

その他の回答 (1)

  • komi1341
  • ベストアンサー率65% (25/38)
回答No.2

ThreadMain.javaには「package socket_110」という宣言がされていますが、他のクラスでも同じ宣言をしてありますか? ソースファイルの配置が適切かどうかは、ThreadMain以外のクラスがどのパッケージに属しているかで決まります。他のクラスもsocket_110パッケージに属する(そういうパッケージ宣言をしてある)のであれば、配置はおそらく合っています。 > socket.110というパッケージの中に、これら4つのソースファイルとこれらに関連したファイルが入っています。 用語も確認した方がよさそうですね。このsocket.110というのはパッケージではなく、Eclipse用のプロジェクト名では? Javaのパッケージの概念とは別物なので混同しないように気を付けてください。

debukawa
質問者

お礼

回答ありがとうございます。知人に聞いて解決しました。次のように修正しました。 ProtocolFactory protoFactory = (ProtocolFactory) // プロトコルファクトリを取得する Class.forName(“socket_110.” + protocolName + "ProtocolFactory").newInstance(); Dispatcher dispatcher = (Dispatcher) // ディスパッチャを取得する Class.forName(“socket_110.” + dispatcherName + "Dispatcher").newInstance(); 解答していただいた方、ありがとうございました。

関連するQ&A