首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java中修复java.rmi.ConnectionException?

如何在java中修复java.rmi.ConnectionException?
EN

Stack Overflow用户
提问于 2013-11-25 19:16:37
回答 2查看 569关注 0票数 0

我有一个包含3个项目的Java应用程序。服务器、公共和客户端。当我打算使用Naming.lookup获取存根时,出现了一个错误。以下是例外情况

代码语言:javascript
复制
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
java.net.ConnectException: Connection timed out: connect
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Naming.java:101)
at com.simulator.connector.ServerConnector.<init>(ServerConnector.java:60)
at com.simulator.connector.ServerConnector.getServerConnector(ServerConnector.java:85)
at com.simulator.ui.tester.LoginUI.initServer(LoginUI.java:65)
at com.simulator.ui.tester.LoginUI.btLoginActionPerformed(LoginUI.java:268)
at com.simulator.ui.tester.LoginUI.access$200(LoginUI.java:40)
at com.simulator.ui.tester.LoginUI$3.actionPerformed(LoginUI.java:126)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at com.jtattoo.plaf.BaseButtonListener.mouseReleased(BaseButtonListener.java:60)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
   Caused by: java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
... 48 more

服务器,

代码语言:javascript
复制
private void startServer() throws RemoteException {
    Registry registry = LocateRegistry.createRegistry(1099);
    registry.rebind("MyServer", new RemoteFactoryImpl());
}

客户端,

代码语言:javascript
复制
private ServerConnector() throws NotBoundException, MalformedURLException, RemoteException {       

    try {
        remoteFactory = (RemoteFactory) Naming.lookup("rmi://localhost:1099/MyServer");
    } catch (ConnectException ex) {
        ex.printStackTrace();
    } catch (UnknownHostException ex) {
        ex.printStackTrace();
    } catch (NotBoundException ex) {
        ex.printStackTrace();
    } catch (MalformedURLException ex) {
        ex.printStackTrace();
    } catch (RemoteException ex) {
        ex.printStackTrace();

    }
}

当我运行这个程序时,我在10秒后得到了这个错误。

EN

回答 2

Stack Overflow用户

发布于 2013-11-26 08:34:41

注册表正在被垃圾收集。将Registry引用设为静态。

票数 0
EN

Stack Overflow用户

发布于 2013-11-25 19:27:23

你在什么操作系统上运行这个程序?它可以是DNS / IP地址查找。如果您运行服务器,请尝试

代码语言:javascript
复制
telnet localhost 1099

在终端上,它可以连接吗?如果不是,则说明存在DNS或防火墙问题。在这种情况下,请尝试

代码语言:javascript
复制
telnet 127.0.0.1 1099

代码语言:javascript
复制
telnet <insert your LAN IP address> 1099

看看这两个能不能用。至少这会告诉你问题出在服务器还是客户端。

编辑

正如Sionnach733建议的那样,您需要保持服务器处于活动状态:

代码语言:javascript
复制
private void startServer() throws RemoteException {
Registry registry = LocateRegistry.createRegistry(1099);
registry.rebind("MyServer", new RemoteFactoryImpl());
while(true) {
    try { 
        Thread.sleep(1000); 
    } catch(Exception e) { }
}
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20190813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档