【发布时间】:2011-08-18 18:17:54
【问题描述】:
我正在学习 Java RMI,并且有一个示例代码来展示如何使用 RMI 通过网络将对象传递给另一个虚拟机。
这是我正在使用的类和代码;
//interface
import java.rmi.*;
public interface MyRemote extends Remote
{
public String sayHello() throws RemoteException;
}
//My Remote Implementation Class
import java.rmi.*;
import java.rmi.server.*;
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote
{
public String sayHello()
{
return "Server says, 'Hey' ";
}
public MyRemoteImpl() throws RemoteException
{
}
public static void main (String[] args)
{
try
{
MyRemote service = new MyRemoteImpl();
Naming.rebind("Remote Hello", service);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
//My Remote Client Class
import java.rmi.*;
public class MyRemoteClient
{
public static void main (String [] args)
{
new MyRemoteClient().go();
}
public void go()
{
try{
MyRemote service = (MyRemote) Naming.lookup("rmi://127.0.0.1/Remote Hello");
String s = service.sayHello();
System.out.println(s);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
我不断收到 java.net.MalformedURLException: invalid URL String: rmi://127.0.0.1/Remote Hello 我知道这是由于 'Naming.lookup("rmi://127.0.0.1/Remote Hello" )' 最后一课的代码。
我已经安装了 tomcat 并尝试将文件放在一个目录中,试图让它在我的本地机器上运行,但我没有任何乐趣。
我已经为我的项目创建了一个 JAR 文件,并尝试将它也放在一个目录中,但仍然没有成功。我听说过战争文件,但目前我正在学习的书还没有出现...
关于如何在不调用异常的情况下解决此问题的任何提示?我是否将文件错误地放置在 Tomcat 中?我已将它们放在我的 C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps 目录中。
任何帮助或提示将不胜感激。
更新
感谢您的建议,字符串异常似乎已经消失,但现在我对此感到很困惑。
java.rmi.ConnectException:连接拒绝主机:127.0.0.1;嵌套异常是: java.net.ConnectException:连接被拒绝:连接 在 sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619) 在 sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216) 在 sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202) 在 sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340) 在 sun.rmi.registry.RegistryImpl_Stub.lookup(未知来源) 在 java.rmi.Naming.lookup(Naming.java:101) 在 MyRemoteClient.go(MyRemoteClient.java:13) 在 _SHELL57.run(_SHELL57.java:10) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:623) 在 bluej.runtime.ExecServer$3.run(ExecServer.java:774) 引起:java.net.ConnectException:连接被拒绝:连接 在 java.net.DualStackPlainSocketImpl.connect0(本机方法) 在 java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:316) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:177) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:164) 在 java.net.PlainSocketImpl.connect(PlainSocketImpl.java:154) 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:352) 在 java.net.Socket.connect(Socket.java:569) 在 java.net.Socket.connect(Socket.java:519) 在 java.net.Socket.(Socket.java:416) 在 java.net.Socket.(Socket.java:199) 在 sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40) 在 sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146) 在 sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
【问题讨论】:
-
Remote Hello中没有空格可以试试