Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

javaでrmi 実行結果がうまくいかない

次のrmiプログラムでクライアントの1〜5までの
値をサーバ側で加算してその合計x4=15と表示させたいのですが値がx4=0となってしまいます。
どこを修正すれば正しい値が得られるでしょうか?考えてもわからないのでどうぞよろしくおねがいします。

インターフェイス
Calculat.java
public interface Calculat 
          extends java.rmi.Remote { 
    public double k(double x[],int i,double a)
    throws java.rmi.RemoteException;


リモートオブジェクト 
CalculatorImp.java

public class CalculatorImp                   /* Calcukatorインターフェースを実装 */
    extends 
      java.rmi.server.UnicastRemoteObject 
    implements Calculat { 
     public CalculatorImp()                        /* エクスポートすることで始めて、そのリモートオブジェクトはクライアントから利用できるようになる */
        throws java.rmi.RemoteException { 
        super(); 
    } 

public double k(double x[],int i,double a)
    throws java.rmi.RemoteException{
        int n=5;
    a=0.0;

for(int j=0;j<n;j++){
    a+=x[j];
}
    return a;    
 
}


クライアント
Sc.java

import java.rmi.Naming; 
import java.rmi.RemoteException; 
import java.net.MalformedURLException; 
import java.rmi.NotBoundException; 
import java.util.Random;
public class Sc {
public static void main(String[] args) {
 try{
    Calculat C = (Calculat)                      /* サーバプログラムで名前をつけてRMIレジストリに登録したリモートオブジェクトを取り出しています */
                           Naming.lookup(
                 "rmi://localhost/CalculatorService");
double xxx[]={1,2,3,4,5};
double x4=0.0;
C.k(xxx,5,x4);
System.out.println("x4=" + x4);

 catch (MalformedURLException murle) { 
     System.out.println(); 
     System.out.println(
       "MalformedURLException"); 
     System.out.println(murle); 
 } 
 catch (RemoteException re) { 
     System.out.println(); 
     System.out.println(
                 "RemoteException"); 
     System.out.println(re); 
 } 
 catch (NotBoundException nbe) { 
     System.out.println(); 
     System.out.println(
                "NotBoundException"); 
     System.out.println(nbe); 
 } 
 catch (
     java.lang.ArithmeticException
                               ae) { 
     System.out.println(); 
     System.out.println(
      "java.lang.ArithmeticException"); 
     System.out.println(ae); 
 } 


サーバ
CalculatorS.java
import java.rmi.Naming;

public class CalculatorS {

   public CalculatorS() {
     try {
       Calculat C = new CalculatorImp();                           
       Naming.rebind("rmi://localhost:1099/CalculatorService", C);
      
     } catch (Exception e) {                                          
       System.out.println("Trouble: " + e);
     
   }
}

   public static void main(String args[]) {
     new CalculatorS();
   }
}

2

回答

82201

閲覧

2件の回答

評価

0

ガイドラインは読んだかな。
それから、デバッグって知ってる?
考えただけで分かるような不具合は、そもそも大した話じゃない。

評価

0

突っ込みところは満載のソースだけど
RMIとか以前の問題。

プリミティブとオブジェクトについて
理解しましょう。

kメソッドに渡しているx4ってプリミティブだよね?
まぁ、それは置いといてkからの戻り値を受けてないよね?

mainメソッドで定義しているx4と
kの引数であるaが全く別モノであることを理解しましょう。

あとはもう少し質問する際にはソースを綺麗にね。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。