2014-09-05 43 views
0

我:RMI方法調用拋出NPE

  1. GUI這要求來自用戶的輸入來創建新的用戶。
  2. 一旦點擊提交,它將在AdminModule類中調用createPlayer(throws RemoteException)。
  3. 我將參數傳遞給AdminInterfaceImplementation(throws RemoteException)以調用PlayersData類中的另一個方法來創建對象。注意PlayersData中的方法沒有被調用。

我正在運行RMI並測試了與簡單println的連接,它工作正常。但是,該方法仍然沒有調用。請提出建議,可能是什麼問題。

PlayersData中的方法是否需要拋出RemoteException才能工作?

// AdminModule 

public static void main(String args[]) 
    { 
     try { 

      System.out.println("Hi from AdminModule"); 
      AdminFactory theWorks = (AdminFactory) Naming.lookup("rmi://localhost:13456/AdminInterfaceTest"); 
      myAdminInterface = theWorks.newAdminInterface(); 
      new AdminModule().run(); 
     } 

     catch (Exception e) 
     { 
      System.out.println("catch" + e); 
     } 
    } 

    public void createPlayer(String name, String password, int chips) throws RemoteException 
     { 
      String hashedPassword = Utility.getHash(password); 
      myAdminInterface.createPlayer(name, hashedPassword, chips);  
      System.out.println ("Create Player from Admin Module: " + name + ", " + hashedPassword + ", " + chips); 

     } 


    // AdminInterfaceImplementation 

    public void createPlayer(String name, String password, int chips) throws RemoteException { 
      System.out.println ("Create Player from Admin Interface: " + name + ", " + password + ", " + chips); // can display in console 
      adminModule.test(name, password, chips); //this method doesn't get invoked. 
     } 


//PlayersData - not invoke 

public void addPlayer(String name, String password, int chips) { 

     System.out.println ("Create Player from PlayersData: " + name + ", " + password + ", " + chips); 
     Player p = new Player (name, password, chips); 
     playerList.add(p); 
     JOptionPane.showMessageDialog(null, "Player created successfully", "Display", 
       JOptionPane.INFORMATION_MESSAGE); 
} 

更新:

的方法被調用,但現在有以下錯誤...

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at AdminInterfaceImpl.createPlayer(AdminInterfaceImpl.java:13) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:303) 
    at sun.rmi.transport.Transport$1.run(Transport.java:159) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 
    at java.lang.Thread.run(Thread.java:695) 
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) 
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) 
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) 
    at AdminInterfaceImpl_Stub.createPlayer(Unknown Source) 
    at AdminModule.createPlayer(AdminModule.java:79) 
    at AdminMenuFrame$6.actionPerformed(AdminMenuFrame.java:198) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
    at java.awt.Component.processMouseEvent(Component.java:6414) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3275) 
+0

將您的默認端口更改爲1099,以及如何使用命令行或任何IDE(Eclipse/NetBeans)實現它? – 2014-09-05 04:39:05

+0

@shekharsuman我使用1099時出現連接拒絕錯誤。我正在使用Eclipse。 – user23 2014-09-05 04:42:36

+0

它看起來像在客戶端創建了一個'AdminModule'實例,它成功地向服務器發出遠程調用。但服務器在'createPlayer()'中獲得一個NPE。我在猜想13號線的內容,但我會說**服務器**端的'adminModule'爲空。 – 2014-09-05 06:43:04

回答

1

問題通過初始化方法的createPlayer內PlayersData類對象解決。

相關問題