0
我遇到了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
,如果你想檢查我的整個代碼一個Git回購可以在這裏https://bitbucket.org/t3x4s/mri/src
感謝您的回答 T