1.jre下面有个policytool的工具
2。生成.java.policy后,文件内容为
grant
{
permission java.net.SocketPermission "*","listen";
permission java.net.SocketPermission "*","accept";
permission java.net.SocketPermission "*","connect";
permission java.net.SocketPermission "*","resolve";
};应该可以搞定。
2。生成.java.policy后,文件内容为
grant
{
permission java.net.SocketPermission "*","listen";
permission java.net.SocketPermission "*","accept";
permission java.net.SocketPermission "*","connect";
permission java.net.SocketPermission "*","resolve";
};应该可以搞定。
HelloServer err:RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: test_rmi.HelloImp1_Stubtest_rmi.HelloImp1_Stub这个HelloImp1_Stub类已经生成了啊!怎么回事呢?
classpath=d:\hehe;
http://expert.csdn.net/Expert/topic/1338/1338441.xml?temp=.3698542
E:\work\huangyuan_test\test_RMI\classes
-Djava.rmi.server.codebase=file:E:\work\huangyuan_test\test_RMI\classes\test_rmi -Djava.security.policy=file:E:\work\huangyuan_test\test_RMI\.java.policy
但是还是没有用!
HelloImp1 obj=new HelloImp1();
Naming.rebind("//127.0.0.1/HelloServer",obj);
System.out.println("HelloServer bound in registry");
}catch (Exception e){
System.out.println("HelloServer err:"+e.getMessage());
e.printStackTrace();
}
换成下面的代码试试看
try{
HelloImp1 obj=new HelloImp1();
Naming.rebind("//127.0.0.1/HelloServer",obj);
System.out.println("HelloServer bound in registry");
} catch (RemoteException ex){
Registry r = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
r.rebind("//127.0.0.1/HelloServer",obj);
}catch (Exception e){
System.out.println("HelloServer err:"+e.getMessage());
e.printStackTrace();
}
而是要通过
-Djava.rmi.server.codebase=file:/E:\work\huangyuan_test\test_RMI\classes/
指定
放在try块的外面就可以了。
不过我估计是路径的问题,有没有这样试过
不要把你的stub class的路径放到系统环境变量中的classpath中
而是要通过
-Djava.rmi.server.codebase=file:/E:\work\huangyuan_test\test_RMI\classes/
指定
这位MM学java多久了?不要一上来就用这种集成工具,这样会掩盖很多问题的。
用命令 rmiregistry
然后java -Djava.rmi.server.codebase=file:/E:\work\huangyuan_test\test_RMI\classes
/
-Djava.security.policy=java.policy
我想你出错的原因就在于
file:/E:\work\huangyuan_test\test_RMI\classes
/
你的codebase没有加两个反斜杠
3。就是运行你的客户端。不过你好像还没写哦
先在JBuider里,改改看,主要是CODEBASE
-Djava.rmi.server.codebase=file:/E:\work\huangyuan_test\test_RMI\classes\test_rmi/-Djava.security.policy=file:/E:\work\huangyuan_test\test_RMI\.java.policy(HelloImp1_Stub.class)
要运行的就是这个类嘛,对了,请问你是怎么运行的?
和classpath的概念,另外就是
(HelloImp1_Stub.class)太让我意外了
抛开参数不管,要运行一个一般的class也是要写成
java xxx这种形式啊
你怎么要加括号呢?搞不懂,这个名字就是我上面说的test_rmi.HelloImp1
也就是你的server class的全名
import java.awt.event.*;
import java.applet.*;
import java.rmi.Naming;
import java.rmi.RemoteException;/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/public class HelloApplet extends Applet {
private boolean isStandalone = false;
String message="blank";
Hello obj=null;
//Get a parameter value
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
} //Construct the applet
public HelloApplet() {
}
//Initialize the applet
public void init() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
//Component initialization
private void jbInit() throws Exception {
obj=(Hello)Naming.lookup("//"+getCodeBase().getHost()+"/HelloServer");
message=obj.sayHello();
}
public void paint(Graphics g){
g.drawString(message,25,50);
}
//Get Applet information
public String getAppletInfo() {
return "Applet Information";
}
//Get parameter info
public String[][] getParameterInfo() {
return null;
}
}
-Djava.rmi.server.codebase=file:/E:\work\huangyuan_test\test_RMI\classes/-Djava.security.policy=file:/E:\work\huangyuan_test\test_RMI\.java.policy
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>
HTML Test Page
</title>
</head>
<body>
test_rmi.HelloApplet will appear below in a Java enabled browser.<br>
<applet
codebase = "file:/E:\work\huangyuan_test\test_RMI\classes/"
code = "test_rmi.HelloApplet.class"
name = "TestApplet"
width = "400"
height = "300"
hspace = "0"
vspace = "0"
align = "middle"
>
</applet>
</body>
</html>