2011-01-19 7 views
3

大学のプロジェクトでRMIを探していて、ちょっとした問題に遭遇しています。何が読み込まれてから、Javaバージョン5以降では、必要なスタブファイルが自動的に生成されるはずです(以前は追加ステップが必要でした)。javacがRMIのスタブを作成していません

ここでhttp://download.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.htmlのチュートリアルを実行し、Javacで自分のクラスをコンパイルした後、iveは標準のクラスファイルだけを取得し、スタブファイルの兆候はありません。

これは私がプロジェクトを実行しようとすると確認されます。私のアプリケーションでは、スタブファイルが見つからないとクラッシュします。何か不足していますか? exportObject()

java version "1.6.0_21" 
Java(TM) SE Runtime Environment (build 1.6.0_21-b07) 
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode) 
+0

私の経験から、RMIは作業に苦労しています。私が大学で与えられたRMIの割り当ては、講師が提出が実際に実行できるかどうか気にしなかった唯一のものでした... – chrisbunney

答えて

2

私はあなたがあなたのサーバーに

RemoteInterface stub = 
(RemoteInterface) UnicastRemoteObject.exportObject(server); 

のようなものを使用すると信じて、代わりに

RemoteInterface stub = 
(RemoteInterface) UnicastRemoteObject.exportObject(server, 0); 

注2つの引数:java -versionは私にこれを与えを実行している

NB、 - 2番目のバージョンは異なる型を返します。それは確かに私のために違いを生む。

1

スタブが必要でないか、5.0以上のjvmsで生成されました。 パスのいくつかが間違っているかもしれない、チュートリアルはディレクトリ/パスを設定する方法や、どこからものを実行するのかについてはあまり明確ではないかもしれません。

私のために働い以下:

 
~/tmp$ mkdir -p hello/example 
~/tmp$ vim hello/example/Hello.java [copy/paste the code of Hello.java here] 
~/tmp$ vim hello/example/Server.java [copy/paste the code of Server.java here] 
~/tmp$ vim hello/example/Client.java [copy/paste the code of Client.java here] 
~/tmp$ mkdir build 
~/tmp$ javac -d build/ hello/example/*.java 
~/tmp$ rmiregistry & 
~/tmp$ java -classpath build -Djava.rmi.server.codebase=file:build/ example.hello.Server & 
Server ready 
~/tmp$ java -classpath build example.hello.Client 
response: Hello, world! 

ここで重要な部分を構築し、実行しているものを、だけでなく、クラスパスと-Djava.rmi.serverに適切なディレクトリを渡すときあなたが立っているディレクトリです。コードベース。

関連する問題