【问题标题】:RMI method call throws NPERMI 方法调用抛出 NPE
【发布时间】:2014-09-05 04:33:47
【问题描述】:

我有:

  1. 要求用户输入以创建新用户的 GUI。
  2. 一旦点击提交,它会在 AdminModule 类中调用 createPlayer(抛出 RemoteException)。
  3. 我将参数传递给 AdminInterfaceImplementation(抛出 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)

【问题讨论】:

  • 将默认端口更改为 1099 以及如何使用命令行或任何 IDE(Eclipse/NetBeans)来实现它???
  • @shekharsuman 使用 1099 时出现连接拒绝错误。我正在使用 Eclipse。
  • 看起来在客户端创建了一个AdminModule 实例,成功向服务器发出远程调用。但是服务器在createPlayer() 中获得了 NPE。我在猜测第 13 行的内容,但我会说 server 端的 adminModule 为空。
  • @StuartMarks 谢谢。我在 createPlayer 方法中初始化了类对象,现在没有 NPE 错误。

标签: java rmi


【解决方案1】:

通过在方法 createPlayer 中初始化 PlayersData 类对象解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2021-01-19
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多