我遇到了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
感谢您的回答 Ť
答案 0 :(得分:0)
Exception in thread "main" java.lang.NullPointerException
at tp.rmi.serveur.ChatRemoteImpl.registerCallback(ChatRemoteImpl.java:43)
您正在ChatRemoteImpl.java第43行取消引用空指针。
为什么你在没有相关代码的情况下发布这个问题对我来说是一个谜。无论如何,您应该能够理清自己的NPE。至少我期待它。