質問: java標準ライブラリのclassクラスのメソッドforName()ですが、ここに代入するクラスをどこに置き、それをどう指定すれば良いのかわかりません。 現状ではFAとゆうフォルダ内にある.jarファイルにあるSetクラスをプロントからコンパイルするのですがその時にクラスを指定します。 Setクラスとは指定するクラスをFAフォルダ内にあるサーバーに接続するクラスです。 つまりプロントから java -cp [使うライブラリ] set [接続するクラス名] とゆう風にです。 すると ClassNotFoundException: 接続するクラス名 とゆうエラーが出てしまします。これがクラス名が見つからないとゆうエラーだとゆうことは知っていたので、 setクラスのコードを調べたのですが、そこで入力された接続するクラス名はstringで読み込まれ、string claNameに格納され、 Class.forName(clsName) とゆうコードで処理されていることが分かりました。 class.forName()を読んでみたのですが、結局、接続したいクラスをどこに置いて、それをどうゆうクラスパスで指定すればいいのかわかりませんでした。 class.forName()に入れるクラスはどこに置いてそのクラスパスをどうすればいいのか知りたいです。 接続したいクラス名の部分をサンプルクラスにしたときはうまくいったので、クラスパスが問題です。ライブラリも間違いなくFAフォルダ内に入れています。 私の場合はFAフォルダ内にdemo.jarファイルを作りそこにeclipseで書いたクラスをエクスポートしました。そこでは proとゆう名のパッケージの中にDemoとゆうクラスを書いていて(このクラスを接続したい)、これをエクスポートしてます。 具体的にはプロントでの入力は、 java -cp [使うライブラリ(これは今いるFAフォルダに入っている)] set pro.Demo(パッケージ名とクラス名) とゆう命令です。 サンプルコードの時は同じFAフォルダ内にあるjarファイルに入っているパッケージ名とクラス名で指定していて動いたので、これで動くと思いました。 間違いなくpro.DemoはFAフォルダのdemo.jarにエクスポートされています。もちろんsetクラスが入っているjarと同じFAフォルダに、です。 全て書くと長くなってしまうので所々省略したので説明不足な箇所もあるでしょうが、要約すると、 Class.forName(clsName)のclsNameは、実行したsetクラスが入っているjarファイルと同フォルダにあるdemo.jarにあるpro.Demo(パッケージ.クラス)を指定するときに pro.Demo ではエラーが出た、どうすればクラスパスを正しく、Class.forName(clsName)に入れれるか?とゆう質問です。 最小限に抑えましたが長くなってしましました。よろしくお願いします。
回答: javaコマンドの-cpオプションはクラスパスを指定するものですが、クラスパスというのは クラスを探す起点となる場所(ディレクトリーへのパス or jarファイルへのパス)をセミコロンで区切って複数並べたものです。 もし SetクラスががFA/set.jarに pro.DemoクラスがFA/demo.jarに 含まれているなら `java -cp "FA/set.jar;FA/demo.jar" Set pro.Demo` とすれば期待通りになるはずです。