RMI问题,回调注册失败

时间:2014-02-28 14:02:08

标签: java rmi

我遇到了RMI问题。我正在尝试设置客户端 - 服务器,但似乎客户端“不知道”服务器。

正如您在此代码中看到的那样:

public class ChatClient {


static String t;
static ReceiveCallback callback;

public static void main(String args[]) throws IOException, NotBoundException
{
     callback = new Afficheur();

    ChatRemote chat = (ChatRemote) Naming.lookup("//localhost/chat");


    chat.registerCallback(callback);

    BufferedReader read = new BufferedReader(new InputStreamReader(System.in));

    while(!(t = read.readLine()).equals("fin"))
    {
        chat.send("myName",t);
    }
}

}

这会让我返回以下错误:

Exception in thread "main" java.lang.NullPointerException
at tp.rmi.serveur.ChatRemoteImpl.registerCallback(ChatRemoteImpl.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:160)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
at $Proxy0.registerCallback(Unknown Source)
at tp.rmi.client.ChatClient.main(ChatClient.java:26)

我正在使用ChatRemote界面:

public interface ChatRemote extends Remote{

public String echo(String name, String message) throws RemoteException;
public void send(String name, String message) throws RemoteException;
public void registerCallback(ReceiveCallback callback) throws RemoteException;

}

我的服务器类看起来像这样

public class ChatServeur {

public static void main(String[] args) throws RemoteException, MalformedURLException {



    ChatRemote chat = new ChatRemoteImpl();
    Naming.rebind("///chat", chat);
    System.out.println(chat+" enregistré");

}
    }

要完成,我正在后台运行脚本rmiregistry.sh。我对这两个类(服务器和客户端)都有一些参数:

服务器:

-Djava.security.manager -Djava.security.policy=chat.policy -Djava.rmi.server.codebase=file:/private/student/7/17/10003117/workspace/TP3_MRI/bin/ -Djava.rmi.server.hostname="localhost"

客户:-Djava.security.manager -Djava.security.policy=chat.policy

如果你想查看我的整个代码,可以在https://bitbucket.org/t3x4s/mri/src找到git repo

感谢您的回答 Ť

1 个答案:

答案 0 :(得分:0)

Exception in thread "main" java.lang.NullPointerException
at tp.rmi.serveur.ChatRemoteImpl.registerCallback(ChatRemoteImpl.java:43)

您正在ChatRemoteImpl.java第43行取消引用空指针。

为什么你在没有相关代码的情况下发布这个问题对我来说是一个谜。无论如何,您应该能够理清自己的NPE。至少我期待它。

相关问题