当前位置: 首页 > 知识库问答 >
问题:

本地主机上的NotBoundException

祁刚毅
2023-03-14

我有一个RMI服务器在本地主机上运行,导出message类型的对象:

try {
    MessageServer obj = new MessageServer();
    Message stub = (Message) UnicastRemoteObject.exportObject(obj, 0);
    Registry registry = LocateRegistry.getRegistry();
    registry.bind("M", stub);
} catch (RemoteException e) {
} catch (AlreadyBoundException e) {
}

然后我想启动一个客户端并获取该对象的存根。似乎找到了注册表,但随后在try块中抛出了NotBoundException:

java.rmi.NotBoundexception:M在sun.rmi.registry.registryimpl.lookup(registryimpl.java:136)在sun.rmi.server.unicastserverref.olddispatch(未知源)在sun.rmi.server.unicastserverref.dispatch(unicastserverref.java:409)在sun.rmi.server.unicastserverref.dispatch(unicastserverref.java:267)在sun.rmi.transport.transport$1。run(transport.javaTreamRemoteCall.java:273)位于sun.rmi.transport.StreamRemoteCall.ExecuteCall(StreamRemoteCall.java:251)位于sun.rmi.server.UnicastRef.Invoke(UnicastRef.java:377)位于sun.rmi.Registry.RegistryImpl_Stub.Lookup(未知源)位于rmiteSt.MessageClient.Main(MessageClient.java:23)

public static void main(String args[]) {
        //String host = "localhost";
        Registry registry;
        Message stub = null;
        try {
            registry = LocateRegistry.getRegistry();
            stub = (Message) registry.lookup("M"); //NotBoundException thrown here
        } catch (NotBoundException ex) {
        } catch (AccessException ex) {
        } catch (RemoteException ex) {
        }
        try {
            stub.insert("TestString"); //NullPointerException here
        } catch (RemoteException ex) {
        }

}

为什么找不到“m”?服务器和客户端都是在Netbeans内部启动的,注册表是通过终端预先启动的。

共有1个答案

帅博简
2023-03-14

RMI是一种野兽,如何运行它总是一个问题。

首先,按照@EJP的建议进行正确的异常处理:一个原因可能是您遇到了连接超时或类似的情况--所以将e.printStackTrace()放入catch块中,让我们看看是否会收到某种错误消息(顺便说一下,当您调试一个被抑制的异常两天后,您会很快停止创建空的catch块)。难道不能是你的防火墙来捕捉连接吗?

我还将getRegistry()更改为createRegistry(),将bind()更改为rebind()(这可以节省您一点时间)。

您得到的异常是因为您的主应用程序无法绑定(注册)您想要的服务,并且它在默认注册表中丢失(不可用)。

RMI可以通过几种方式实现。您选择的方法在开发和测试中绝对是很酷的,但是如果要将其置于生产环境中,则需要做一些更改(例如,可能会有一个通用的RMIRegistry在某个地方运行,您必须使用策略文件和一些属性,如java.rmi.codeBase=...,您需要安装一个适当的安全管理器,等等)

 类似资料:
  • 我一直在仅在Dreamweaver中开发一个PHP项目。在确定Netbean会让我的生活更轻松之后,我为PHP安装了Netbean 7.2。 我遵循了项目设置指南,但我对项目文件夹有问题。我可以编辑和保存源文件,但如何更新本地主机上的文件? 具体来说,我在我们的工作驱动器上有项目源文件,我可以将其用作常规硬盘驱动器。我甚至在Dreamweaver中为这个项目提供了一个站点文件,其中源文件夹、本地文

  • 我还一直得到“自动填充$HTTP_RAW_POST_DATA是deprecated”,并且我已经在.ini中将always_populate_raw_post_data更改为-1,我一直得到这些。

  • 我刚刚安装了XAMPP-Win32-5.5.30,在xampp控制面板中,Apache和mysql都启动了,没有任何错误,但我发现: 1)浏览器中的localhost重定向到另一个页面localhost/dashboard/而不是xampp起始页。

  • 我在索引中有代码。php 在头上。php 当我尝试在浏览器中打开时,发现以下错误:

  • 问题内容: 我从此链接克隆了一个有关Web浏览器上实时图像处理的项目:然后,我不允许我的浏览器访问我的相机。我收到此JavaScript警报: 嗯,网络摄像头没有启动。你有摄像头吗?您同意了吗?刷新后重试。并且允许按钮不会显示,就像我访问他的网站一样。 问题答案: 您是否正在通过localhost访问通过HTTP提供的网页?如果您通过访问它,Chrome会征求您使用相机的许可。 如果您直接打开网页

  • 我有一个php脚本,想按计划运行它。我在windows上使用本地web服务器(WAMP服务器),需要一种每10分钟运行< code>my_script.php的方法。 如何在WINDOWS中的本地主机上在PHP脚本上运行cron作业?