蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月6日 10:18


!!请教RMI编译与运行问题!!

我刚接触RMI,可在编译运行时出现了麻烦。查了很多资料也不行,特来此请教各位,请各位帮帮忙!在此先谢了!!!
代码如下:

//Hello.java
import java.rmi.*;

public interface Hello extends Remote
{public String sayHello()throws RemoteException;
}

//HelloImpl .java
import java.rmi.*;
import java.rmi.server.*;

public class HelloImpl extends UnicastRemoteObject implements Hello
{public HelloImpl(String name)throws RemoteException
   {super();
     try
       {Naming.rebind(name,this);}
     catch(Exception e){}
    }
public String sayHello()
   {return "HelloWorld!";}
}

//HelloServer.java
import java.rmi.*;
import java.rmi.server.*;

public class HelloServer
{public static void main(String args[])
   {System.setSecurityManager(new RMISecurityManager());
     try
       {HelloImpl obj=new HelloImpl("HelloWorld");
         System.out.println("Server ready");
        }
     catch(Exception e){}
    }
}

//HelloClientFrame.java
import java.rmi.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;

public class HelloClientFrame extends Frame implements ActionListener
{
Panel jp=new Panel();
Label jl=new Label("正在连接......");
Button jb=new Button("连接主机");
public HelloClientFrame()
{
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
try
{jbinit();}
catch(Exception e){}
}
public void jbinit()throws Exception
{jl.setBounds(95,95,197,26);
this.setSize(new Dimension(313,228));
this.setLayout(null);
jb.setBounds(105,154,86,29);
jb.addActionListener(this);
this.add(jb,null);
this.add(jl,null);
}
public void actionPerformed(ActionEvent e)
{
String servername;
System.setSecurityManager(new RMISecurityManager());
try
{//servername=InetAddress.getLocalHost().getHostName();
servername="127.0.0.1";
Hello myHello=(Hello)Naming.lookup("rmi://"+servername+"/HelloWorld");
System.out.println("nnnn\n");
String temp=myHello.sayHello();
jl.setText(temp);
}
catch(Exception e1){System.out.println("异常1\n");e1.printStackTrace();}
}
public static void main(String args[])
{HelloClientFrame t=new HelloClientFrame();
t.setVisible(true);
}
}
//java.policy
grant{
peRMIssion java.net.SocketPeRMIssion "127.0.0.1:1024-65535","accept,connect";
peRMIssion java.net.SocketPeRMIssion "127.0.0.1:80","connect";
}


为什么我用rmic -classpath . HelloImpl 后只生成一个HelloImpl_Stub.class 而没有生成HelloImpl_skel.class 啊,有哪用得不对吗?完全按书上说的做的。
求各位帮帮忙!!多谢先了!!!

再来问一下这问题
java myHello.HelloServer 时正常,出现 Server ready
但java myHello.HelloClientFrame 时出现了对话框,但点击“连接主机“按钮时出现如下异常

请看一下以下异常:
一直搞不懂,上次问了老师,搞了半天他也没给我搞出来。请各位帮帮忙,先谢了!


好像java的哪个版本(记不清了)就不用生成skeleton了

启动服务端和客户端都要使用policy文件




文件名:my.policy
内容如下

[code]
grant{
peRMIssion java.net.SocketPeRMIssion "127.0.0.1:1024-65535","accept,connect";
peRMIssion java.net.SocketPeRMIssion "127.0.0.1:80","connect";
}
[/code]

启动服务端
[code]
java -Djava.security.policy=my.policy myHello.HelloServer
[/code]

启动客户端
[code]
java -Djava.security.policy=my.policy myHello.HelloClientFrame
[/code]

可是出现了如下问题:
请问一下这又是什么原因啊,说解析错误,请问该怎么办。

跟着你的 policy 文件抄了,跟着错了,改成

[code]
grant {
    permission java.net.SocketPermission "*:1024-65535","connect,accept";
    permission java.net.SocketPermission "*:80", "connect";
};
[/code]

历史问题??:)

谢谢各位的回复,不过我改成如下(文件名为me.policy)
grant {
    permission java.net.SocketPermission "*:1024-65535","connect,accept";
    permission java.net.SocketPermission "*:80", "connect";
};

结果还是出现如下异常:

如果只是在封闭的环境中运行,可以先打开所有权限(尽管不推荐这样做),程序运行成功后再缩小范围
policy文件:
grant codeBase "file:C:/RMI/-" {
    permission java.security.AllPermission;
  };

你。。。。。。。。。。。。。。。。。。。

怎么说没绑定。。。


policy 文件改为

grant {
    permission java.net.SocketPermission "*:1024-65535",   "connect,accept";
    permission java.io.FilePermission  "G:\\JAVA\RMI\\-", "read";
};


服务启动了没啊?

确定启动了 rmiregistry

-->



-->


-->


调试不行不要回来了,自己把JJ切掉吧

大哥,这可不行啊,俺还没娶媳妇呢

-->

娶完了切,,



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com