1

如何保持 RMI 服务器运行?它目前,只是绑定和对象,然后退出..

public class WutServer {
  public static void main(String[] args) throws RemoteException {
    Registry registry = LocateRegistry.createRegistry(1099);
    try {
      registry.bind("WutManager", new WutManager());
      System.out.println("Ready..");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

我只是在运行这个课程。我没有运行 rmic 或任何东西..

如何强制它继续运行?

4

5 回答 5

2

尝试这个:

Remote stub = UnicastRemoteObject.exportObject(new WutManager(), 0);
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("WutManager", stub);

注意:WutManager 应该实现 java.rmi.Remote。

于 2011-03-02T09:22:42.553 回答
1

您的服务器正在被 DGC 处理,然后被 GC 处理,这会导致它未导出,如果 JVM 无事可做,最终会导致 JVM 退出。为了阻止这种情况,如果您通过 创建注册表LocateRegistry.createRegistry(),请将该方法的返回值保存在静态变量中。否则,请保留对您的服务器对象的静态引用。

于 2011-03-22T05:46:01.567 回答
0

这是一个老问题,但这里有一个新答案。

在 OSX 上,使用最新的 Java 9.0.4 我发现程序退出了。如果我使用最新的 Java 1.8.0.162,那么它不会退出并且服务器保持运行。

于 2018-02-02T16:41:22.357 回答
-1

需要实现WutServer客户端将访问它的接口,而该接口又应该从标记接口继承Remote。您可能还想让WutServer类继承自UnicastRemoteObject; 虽然还有其他方法可以构建远程支持,但继承自UnicastRemoteObject绝对是最简单的方法。

试试这个(尽管您可能应该将远程接口分离到另一个文件中并单独重新分配):

public class WutServer extends UnicastRemoteObject implements WutServer.Wut {
    interface Wut extends Remote {
        String wut() throws RemoteException;
    }
    // Because of the exception...
    public WutServer() throws RemoteException {}
    public String wut() { return "wut"; }
    public static void main(String[] args) throws RemoteException {
        LocateRegistry.createRegistry(1099).rebind("WutManager",new WutServer());
        System.out.println("Ready...");
    }
}
于 2011-03-02T09:41:17.500 回答
-1

在主函数结束时创建一个对象并调用该对象的wait。那是;

public static void main(String[] args) throws RemoteException {
    Registry registry = LocateRegistry.createRegistry(1099);

    //your object to wait
    Object lockObject=new Object();

    try {            
              registry.bind("WutManager", new WutManager());            
              System.out.println("Ready..");

              //here makes your rmi server non-stop
              synchronized(lockObject){
                    lockObject.wait();
              }
     }catch (Exception e) {            
              e.printStackTrace();          
     } 
}
于 2011-10-17T16:52:29.397 回答