2014-02-28 112 views
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

回答

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

您在ChatRemoteImpl.java的第43行取消引用空指針。

爲什麼你在沒有相關代碼的情況下發布這個問題對我來說是個謎。無論如何,您都希望能夠理清您自己的NPE。至少我期望它。