JAVA RMI制作计算器

我正在尝试使用JAVA RMI制作计算器。该计算器基于“计算”方法,该方法将“命令”对象作为参数。此命令对象有两个双精度变量(要操作的数字),一个char变量(操作“ +,-,*,/”)。以下是实际代码:

Command类的定义:

   import java.rmi.RemoteException;
   import java.rmi.server.UnicastRemoteObject;

public class Command extends UnicastRemoteObject{
   public Command() throws RemoteException
   {

       super();
   }

private double Num1;
private double Num2;
private char Operator;

public Command (double Num1,double Num2,char 
 Operator) throws RemoteException
  {
    this.Num1=Num1;
    this.Num2=Num2;
    this.Operator=Operator;
  }

 public double getNum1(){
    return Num1;
 }

  public double getNum2(){
    return Num2;
 }
 public char getOperator(){
    return Operator;
 }
 }

`

“计算器”界面的定义:

  import java.rmi.Remote;
  import java.rmi.RemoteException;

    public interface Calculator extends Remote

  {

public double Calculate(Command C) throws 
RemoteException;

  }

计算器界面的实现

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

 public class CalcuImplem extends UnicastRemoteObject 
 implements Calculator
{
private double result=0; 

public CalcuImplem() throws RemoteException

{ 
   super();
 }

 public double Calculate(Command C) throws 
RemoteException

 {




switch (C.getOperator()) 
{
case '+' :
    result=C.getNum1()+C.getNum2();
    break;
case '*':
    result=C.getNum1()*C.getNum2();
    break;
case '-':
    result=C.getNum1()-C.getNum2();
    break;
case '/':
    result= C.getNum1()/C.getNum2();
break;
default: 
    result=0;   
}

return result;
 }
 }

服务器:

import java.rmi.Naming;

public class CalculatorServer {

public CalculatorServer() {
    try {Calculator c = new CalcuImplem();
    Naming.rebind("rmi://localhost:1099/CalculatorService",c);
    }
    catch (Exception e) {System.out.println("Trouble: " + e);}

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

}

}

客户:

import java.rmi.Naming;      
import java.rmi.RemoteException;
import java.util.Scanner;
import java.net.MalformedURLException;       
import java.rmi.NotBoundException; 

 public class CalculatorClient  { 

     public static void main(String[] args) {   
        char operation = 'f';
        Scanner sc = new Scanner(System.in);
        System.out.println("Please input the first 
      number");
        double n1= sc.nextDouble();
        System.out.println("Please input the second 
       number");
        double n2= sc.nextDouble();
        System.out.println("Please choose the 
        operation:");
        System.out.println("a. Add");
        System.out.println("b. Substract");
        System.out.println("c. Multiply");
        System.out.println("d. Divide");

        char oc = sc.next().charAt(0);

        switch (oc) 

           {
            case 'a' :
                operation = '+';
                break;
            case 'b':
                operation = '-';
                break;
            case 'c':
                operation = '*';
                break;
            case 'd':
                operation = '/';
                break;
            default: 
                System.out.println("What you has 
        input is meaningless.");

            }


         try {  
             Command cm = new Command(n1,n2,operation);

             Calculator c =             
                     '(Calculator)Naming.lookup("rmi://localhost/CalculatorService"); 
               double r = c.Calculate(cm);
              System.out.println( r ); 

         } catch (MalformedURLException murle) {                 
             System.out.println(murle);              
             } 
         catch (RemoteException re) {                 
             System.out.println(re);              } 
         catch (NotBoundException nbe) 
         {                 
             System.out.println(nbe);           
             }         
         }     
     }

'

可以编译我的文件,并且RMI注册可以正常工作。问题是每次我收到IllegleArgumentException:argument type mismatch的错误。 你们中的任何人都可以帮助我找出我的代码问题吗?

windger2008 回答:JAVA RMI制作计算器

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2784145.html

大家都在问