Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.rmi.ServerException:服务器线程中发生RemoteException_Java_Rmi - Fatal编程技术网

java.rmi.ServerException:服务器线程中发生RemoteException

java.rmi.ServerException:服务器线程中发生RemoteException,java,rmi,Java,Rmi,服务器:创建一个已解决的谜题,可以解决一个未解决的谜题 package server; import java.rmi.*; import java.rmi.server.*; import common.Puzzle; import server.puzzleObject.PuzzleSolved; import java.net.MalformedURLException; class PuzzleSolver { private static final String HOS

服务器:创建一个已解决的谜题,可以解决一个未解决的谜题

package server; 

import java.rmi.*;
import java.rmi.server.*;
import common.Puzzle;
import server.puzzleObject.PuzzleSolved;
import java.net.MalformedURLException;

class PuzzleSolver {
    private static final String HOST = "localhost";

    public static void main(String args[]) {
        try {
            String serverName = args[0];

            Puzzle puzzle = new PuzzleSolved();
            String rmiObServer = "rmi://" + HOST + "/" + serverName;
            Naming.rebind(rmiObServer, puzzle);
            System.out.println("Server ready");
        }
        catch(ArrayIndexOutOfBoundsException ex) {
            System.out.println("Error! E' necessario specificare il nome del server");
        }
        catch(RemoteException r) {
            System.out.println("Error while rebind object");
            r.printStackTrace();
            System.exit(1);
        }
        catch(MalformedURLException m) {
            System.out.println("Error! Malformed url require");
        }
    }
}
package client;

import java.rmi.*;
import java.io.Serializable;

import client.puzzleIO.*;

import common.Solvable;
import common.Puzzle;
import common.PuzzleUnsolved;

class PuzzleSolver {
    private static final String HOST = "localhost";

    public static void main(String args[]) {
        PuzzleWriter writer = null;
        PuzzleReader reader = null;

        try {
            String inputFile = args[0], outputFile = args[1], serverName = args[2];
            writer = new PuzzleWriter();
            reader = new PuzzleReader();
            System.out.println("primo");
            PuzzleUnsolved unsolved = new PuzzleUnsolved();
            reader.read(unsolved, inputFile);
            writer.write(unsolved, outputFile, false);

            System.out.println("secondo");
            Solvable ref = (Solvable) Naming.lookup("rmi://" + HOST + "/" + serverName);
            ref.solve(unsolved);
            writer.write(ref, outputFile, true);
            System.out.println("fine");
        }
        catch(ArrayIndexOutOfBoundsException e) {
            if(args.length == 0)
                System.out.println("E' necessario specificare il file di input e di output");
            if(args.length == 1)
                System.out.println("File di output assente");
            if(args.length == 2)
                System.out.println("E' necessario specificare un nome per il server");
        }
        catch(ConnectException c) {
            System.out.println("Problema di connessione con il server");
        }
        catch(Exception e) {
            System.out.println("Si è verificato un problema nell'esecuzione");  
            e.printStackTrace();
        }
    }
}
客户:创建一个未解决的谜题,然后要求查找一个可解决的对象,然后运行“未解决的谜题解决”

package server; 

import java.rmi.*;
import java.rmi.server.*;
import common.Puzzle;
import server.puzzleObject.PuzzleSolved;
import java.net.MalformedURLException;

class PuzzleSolver {
    private static final String HOST = "localhost";

    public static void main(String args[]) {
        try {
            String serverName = args[0];

            Puzzle puzzle = new PuzzleSolved();
            String rmiObServer = "rmi://" + HOST + "/" + serverName;
            Naming.rebind(rmiObServer, puzzle);
            System.out.println("Server ready");
        }
        catch(ArrayIndexOutOfBoundsException ex) {
            System.out.println("Error! E' necessario specificare il nome del server");
        }
        catch(RemoteException r) {
            System.out.println("Error while rebind object");
            r.printStackTrace();
            System.exit(1);
        }
        catch(MalformedURLException m) {
            System.out.println("Error! Malformed url require");
        }
    }
}
package client;

import java.rmi.*;
import java.io.Serializable;

import client.puzzleIO.*;

import common.Solvable;
import common.Puzzle;
import common.PuzzleUnsolved;

class PuzzleSolver {
    private static final String HOST = "localhost";

    public static void main(String args[]) {
        PuzzleWriter writer = null;
        PuzzleReader reader = null;

        try {
            String inputFile = args[0], outputFile = args[1], serverName = args[2];
            writer = new PuzzleWriter();
            reader = new PuzzleReader();
            System.out.println("primo");
            PuzzleUnsolved unsolved = new PuzzleUnsolved();
            reader.read(unsolved, inputFile);
            writer.write(unsolved, outputFile, false);

            System.out.println("secondo");
            Solvable ref = (Solvable) Naming.lookup("rmi://" + HOST + "/" + serverName);
            ref.solve(unsolved);
            writer.write(ref, outputFile, true);
            System.out.println("fine");
        }
        catch(ArrayIndexOutOfBoundsException e) {
            if(args.length == 0)
                System.out.println("E' necessario specificare il file di input e di output");
            if(args.length == 1)
                System.out.println("File di output assente");
            if(args.length == 2)
                System.out.println("E' necessario specificare un nome per il server");
        }
        catch(ConnectException c) {
            System.out.println("Problema di connessione con il server");
        }
        catch(Exception e) {
            System.out.println("Si è verificato un problema nell'esecuzione");  
            e.printStackTrace();
        }
    }
}
谜题:抽象类

package common;

import java.rmi.*;
import java.rmi.server.*;
import java.util.ArrayList;
import java.io.Serializable;
import common.Solvable;
import common.PuzzleTile;
import common.PuzzleUnsolved;

public abstract class Puzzle extends UnicastRemoteObject implements Solvable{

    private int rows = 0, columns = 0;
    protected ArrayList<PuzzleTile> tiles = new ArrayList<PuzzleTile>();

    public Puzzle() throws RemoteException {
    }
    public int rows(){
        return rows;
    }
    public int columns(){
        return columns;
    }
    public void setColumns(int columns) {
        this.columns = columns;
    }
    public void setRows(int rows) {
        this.rows = rows;
    }
    public void addTile(PuzzleTile t) {
        tiles.add(t);
    }
    protected PuzzleTile tile(int row, int column) {
        return tiles.get(row * columns + column);
    }
    public ArrayList<PuzzleTile> tiles() {
        return tiles;
    }
    public abstract String toString();  
    public abstract void solve(PuzzleUnsolved puzzleToSolve)  throws RemoteException;
}
可解决-用于由客户端远程调用的接口

package common;

import java.rmi.*;
import common.Puzzle;
import common.PuzzleUnsolved;

public interface Solvable extends Remote {
        public void solve(PuzzleUnsolved puzzleToSolve) throws RemoteException;

}
当我试图从客户端解决一个未解决的难题时,我得到了这个堆栈错误:(


远程接口与实际的远程方法不一致。您在未重建和重新部署整个系统的情况下更改了远程方法的签名。

您认为如何向远程对象添加方法?PuzzleSolved有一个方法调用solve,否?可能我不懂这个问题(对不起,我的英语)我错了。我得到的正确错误是(java.lang.IllegalArgumentException)
package common;

import java.rmi.*;
import common.Puzzle;
import common.PuzzleUnsolved;

public interface Solvable extends Remote {
        public void solve(PuzzleUnsolved puzzleToSolve) throws RemoteException;

}
primo
secondo
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$254(TCPTransport.java:683)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1/323034826.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:276)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:253)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:162)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
at com.sun.proxy.$Proxy0.solve(Unknown Source)
at client.PuzzleSolver.main(PuzzleSolver.java:33)