[Java]RMIのコンパイルエラー

このQ&Aのポイント
  • JAVA RMI を実行中に、rmicコンパイラを使用するとエラーが発生しました。
  • コマンドプロンプトで、クラスファイルとソースファイルのあるフォルダに移動し、RemoteインターフェースとRemoteオブジェクトを作成し、これらをコンパイルします。しかし、rmicコマンドを実行するとエラーが表示されます。
  • 原因を特定するために、javaのバージョン、コンパイルの通過状況、rmic.exeへのパスの確認などを行いましたが、問題は解決していません。他に考えられる原因はあるでしょうか?
回答を見る
  • ベストアンサー

[Java]RMIのコンパイルエラー

JAVA RMI をしています。 スタブとスケルトンを作成する為、rmicコンパイラを使用しようとするとエラーがでました。 手順は 1.コマンドプロンプトで、クラスファイルとソースファイルが存在するフォルダに移動 2.Remoteインターフェースを作成 3.Remoteオブジェクトを作成 4.2.と3.をコンパイル 5.rmicコマンドでコンパイル ***結果***************************************** rmic pack.RemoteObj error: クラス pack.RemoteObj が見つかりません。 ************************************************ こんな感じになります。 備考として... ・javaは1.4.1_01を使用しています ・コンパイルは通りました ・rmic.exeにパスは通ってます ・クラスファイルも生成されています ・packはパッケージです どこのサイトでも書かれている手順を踏みました。 他に何か原因として考えられることはあるでしょうか??

  • Java
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

>コマンドプロンプトで、クラスファイルとソースファイルが存在するフォルダに移動 と書いていますが、本当にそこにクラスファイルがあるのですか? パッケージを利用するならばパッケージ名のフォルダ階層の中にクラスファイルが無ければいけません。 簡単に書くと、 カレントディレクトリ\pack\RemoteObj.class という構成でないとクラスファイルが認識されません。

anonymous2005
質問者

お礼

はい。 ディレクトリ構成に問題はなかったのですが、ルートをclasspathにセットするのを忘れていました!! またRMIでは新たな問題が出てきているのですが別スレ立てないと・・・ ご回答ありがとうございました。

関連するQ&A

  • RMI

    http://www.ki.rim.or.jp/~kuro/Java/RMI/index.html を参考にRMIのサンプルを試みています。 サーバ:Linux クライアント:Windows2000 ■サーバ側 ・インタフェース ・リモートオブジェクトクラス ・サーバプログラムクラス ・スタブクラス ・スケルトンクラス ・セキュリティポリシーファイル ・また、/usr/binにあるrmiregistryを違うところに 退避させました。  ■クライアント側 ・クライアントプログラムファイル ・リモートオブジェクトクラス ・セキュリティポリシーファイル それぞれ、準備した後、サーバ側で、 rmiregistry & ↓ java -Djava.security.policy=rmitestpolicy -Djava.rmi.server.codebase=http://192.168.1.10/ RMITestServer とすると、 Exception in thread "main" java.lang.NoClassDefFoundError:RMITestServer とでます。Noclassといわれている、クラス、は 存在しているのですが。。。 なにか、はずしているようでしたら教えていただきたい ので,宜しくお願いします。

  • [JAVA]一括コンパイル

    こんにちわぁ♪ DevBoosterという開発環境でJAVAのプログラミングを行っています。 しかし、この開発環境は1つのJAVAファイルを単体にてのみコンパイル可能でフォルダ内のJAVAファイルを一気にコンパイルさせるというような機能はありません。 Devasというツールを使って一気に置換させる作業をよく行います。 そのたびに1つ1つのファイルをコンパイルしているので非常に手間がかかります。 そのような、ファイル内一括(一斉)コンパイラみないなツールご存知ないですか??

    • ベストアンサー
    • Java
  • RMI

    ここのサイト通りの手順でやったのですが http://www.hellohiro.com/rmi.htm C:\JavaHello\RMI>java -Djava.security.policy=java.policy -Djava.rmi.server.codebase=file:///C:\JavaHello\RMI\ HelloWorldObj を実行するところで Exception in thread "main" java.lang.NoClassDefFoundError: Files\Java\RMI Caused by: java.lang.ClassNotFoundException: Files\Java\RMI\ at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) Could not find the main class: Files\Java\RMI\. Program will exit. このようなエラーメッセージがでて解決できません。 エラーをなくす方法を教えてください!

  • コンパイルの実行の仕方

    初めてプログラミング言語を授業でとったのですが、 コンパイルの【実行】の仕方がわかりません。 まず、コマンドプロンプトを開くまではわかったのですが、 学校での説明に 「javaのコンパイラはjavacであるので、以下のように指定する。 javac <ソースファイル名> 」 と書いてありました。 コンパイラというのは上記の場合、コマンドプロンプトに 「C:\>javac *****.java」を入力すればコンパイルしたということになるのでしょうか? 「指定する」とかいてあっても指定の仕方すらわからないのです。 コンパイルを検索してもなかなかコンパイルをする意味がよくわからないので、よろしければ教えてください。

  • JavaのRMIで!!

    クライアントから呼び出してサーバーでhogehogeを表示させるようにこんなプログラムを書きました。 command.javaが以下の内容 import java.rmi.*; interface command extends Remote{ void comcom() throws RemoteException; } commandclient.javaが以下の内容 import java.rmi.*; public class commandclient { public static void main(String args[]) { command obj = null; try { System.setSecurityManager(new RMISecurityManager()); obj = (command)Naming.lookup("rmi://localhost/MyObject"); obj.comcom(); } catch(Exception e) { e.printStackTrace(); } } } commandserver.javaが以下の内容 import java.rmi.*; import java.rmi.server.*; public class commandserver extends UnicastRemoteObject implements command { public static void main(String args[]) { if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } try { commandserver obj = new commandserver(); Naming.rebind("MyObject", obj); } catch (Exception e) { e.printStackTrace(); } } public commandserver() throws RemoteException { } public void comcom() throws RemoteException { System.out.println("hogehoge"); } } こんなプログラムを書いてコンパイルして実行したらhogehogeが表示されるかな?と思ったら実効するとなんか意味不明なエラーがでます。これはなぜでしょうか?

  • Java2Dの実行エラー(2)

    作成したJavaのソースをjavacでコンパイルを通し、 そのあとにjavaコマンドで実行を通したところ、 以下のようなエラーメッセージが出力され実行できませんでした。 (作成したクラスファイルは「EdgeDetection.class」です。) ------------------------------------------------- C:\TEMP>java -cp . EdgeDetection Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException at EdgeDetection.main(EdgeDetection.java:31) ------------------------------------------------- このエラーを解消するためにもクラスパスの設定(-classpathオプション)もしましたが、駄目でした。 この現象を解決するには、どのようにしたらよろしいのでしょうか?

    • ベストアンサー
    • Java
  • コンパイルができない

    javac コマンドでコンパイルしようとするのですが、 ファイルが読み込めないという表示が出ます。 コンパイルしようとするファイル(DL.java)はjavac.exe と同じフォルダにあります。クラスパスもset CLASSPATH で同じフォルダに設定しています。 コンパイルしようとするファイルは、テキストエディタで作成した後、ファイル名の変更でもとのファイル名に.javaを付け足していますが、ファイルを見ると[DL.java][テキストエディタ]となっています。 分からなくて困っています。どうかよろしくお願いします。

    • ベストアンサー
    • Java
  • [RMI]UnicastRemoteObject.exportObjectで毎回例外が出る

    RMIサーバ/クライアントを実験しているのですが、JDK5.0にて http://72.5.124.55/j2se/1.5.0/ja/docs/ja/guide/rmi/socketfactory/index.html や http://d.hatena.ne.jp/nowokay/20060112 にあるように、 (1)リモートオブジェクトを new (2)UnicastRemoteObject.exportObject() (3)LocateRegistry.createRegistry() (4)(3)で起動した rmiregistry に bind しようとしたのですが、(3)(4)にたどり着くまでもなく、 (2)で必ず例外(ExportException: object already exported)が出てしまいます。 具体的には以下のようなコードが私の環境では例外になってしまいます。 (便宜上内部クラスとして記述し直しています。また空白を全角にしています) =================================================================== package test; import java.rmi.Remote; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import java.rmi.server.UnicastRemoteObject; public class Server {   public static void main(String[] args) throws Exception {     Server server = new Server();     server.init();   }   public void init() throws Exception {     Foo rmiObj = new FooImpl();     Foo stub = (Foo) UnicastRemoteObject.exportObject(rmiObj, 41199); //★ここで例外     LocateRegistry.createRegistry(1099);     Registry registry = LocateRegistry.getRegistry(1099);     registry.rebind("fooService", stub);   }   /* リモートインターフェース */   public interface Foo extends Remote {     public void hello() throws RemoteException;   }   public class FooImpl extends UnicastRemoteObject implements Foo {     public FooImpl() throws RemoteException {}     public void hello() throws RemoteException {       System.out.println("Hello World.");     }   } } =============================================================== ★例外 Exception in thread "main" java.rmi.server.ExportException: object already exported at sun.rmi.transport.ObjectTable.putTarget(ObjectTable.java:172) at sun.rmi.transport.Transport.exportObject(Transport.java:75) at sun.rmi.transport.tcp.TCPTransport.exportObject(TCPTransport.java:196) at sun.rmi.transport.tcp.TCPEndpoint.exportObject(TCPEndpoint.java:382) at sun.rmi.transport.LiveRef.exportObject(LiveRef.java:116) at sun.rmi.server.UnicastServerRef.exportObject(UnicastServerRef.java:180) at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:293) at java.rmi.server.UnicastRemoteObject.exportObject(UnicastRemoteObject.java:235) at test.Server.init(Server.java:18) at test.Server.main(Server.java:13) =============================================================== init の2行目、つまり実質 new して exportObject しようと するだけで例外になってしまうので、原因がよく分かりません。 他プロセスに起動したものが残っていたりしないか確認しましたが、 特に見受けられませんでした。 実はそのまさに2行目を抜いた状態で RMI サーバを起動しておき、 リモートオブジェクトを取ると…うまく取れてしまいました。 (ただし RMI サーバ/クライアントはともに同じローカル) が、上で挙げた情報先にあるような書き方でできないのがどうにも 気持ち悪いのです。 どこが悪いのでしょうか…

  • シンボルを見つけられませんというエラーでコンパイルできない

    こんにちは。 Test.javaとTest2.javaというファイルを作りコンパイルしようとしたんですがタイトルのエラーが出てコンパイルできません。全く意味が分からなくて困ってます。 test.javaの中で Test2 test2 = new Test2(); という形でTest2クラスのインスタンスを生成しています。 同じフォルダの中にあるのに見当たらないというのはどうにも分かりません。 環境変数は CLASSPATH . PATH C:\Program File\Java\jdk1.5.0_06\bin となってます。

    • ベストアンサー
    • Java
  • java コンパイルエラー

    java コンパイルエラー java 初心者です。 簡単なプログラムを作りながら練習していたのですが、Exceptionクラスを継承して新しい例外を作る以下のプログラムで、コンパイルエラーとなり、解決できません。 class NewException extends Exception{ public NewException(){ super("エラー"); } } これを javac でコンパイルすると、 NewException.java:3: シンボルを見つけられません。 シンボル: コンストラクタ Exception(java.lang.String) 場所  : Exception の クラス super("エラー"); ^ エラー1個 と言われます。 これを読むと「Exception には String を引数にとるコンストラクタはないよ」と言われているように思えるのですが、そんなはずないのでは。。 もし原因がお分かりの方がいらしたら、ご教示いただけるとありがたいです。

    • ベストアンサー
    • Java