我目前正在学习Java,通过开发一个工具来创建和填写多选表单客户端并保存以及评估服务器端。我使用了RMI教程中的代码框架作为网络部分,直到现在才正常工作。客户端和服务器应用程序都在同一个包中,但作为单独的应用程序运行。为了便于开发,他们现在都在同一个系统上运行,尽管这会在事情发生时发生变化。
因此,让我们通过一些代码切入追逐,以及究竟出现了什么问题:
Server.java
Server() throws RemoteException {
super();
}
public static void main(String[] args) {
try {
LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
}
catch (RemoteException ex) {
System.out.println("SERVER: " + ex.getMessage());
}
try {
Naming.rebind("Server", new Server()); <---
}
catch(MalformedURLException ex) {
System.out.println("SERVER: " + ex.getMessage());
}
catch(RemoteException ex) {
System.out.println("SERVER: " + ex.getMessage());
}
}
[...] methods that are called by the client via ServerInterface
&lt; ---标记Client-GUI的启动位置。
Client.java
private static Gui_loadSets gui_loadSets = new Gui_loadSets();
public static void main(String[] args) {
loadGuiLoadSets();
}
这是第一个GUI变为可见的地方;选择要加载的表单的那个。这个GUI是通过启动服务器来加载的,即使我评论这个也是如此。所以服务器并没有真正加载Client-App,而是以某种方式神奇地访问它的GUI并无缘无故地显示它。
我已经尝试在加载GUI之前“踩到”线,但最终我最终陷入无限循环,所以我真的不知道发生了什么。
这是我的第一个问题,如果我错过任何明显的事情,请原谅我。 感谢您的帮助。如果您需要更多代码,我很乐意提供,但剩下的大部分代码都是关于多选形式的。
答案 0 :(得分:0)
Naming.rebind()
需要一个网址,而不仅仅是一个服务名称。它应该是
Naming.rebind("rmi://localhost/Server", new Server());
但是我对你对这条线的评论感到困惑。 -->
没有“标记客户端GUI的启动位置”,它标记了远程对象的构造,导出和绑定到注册表的行。客户端GUI位于客户端。
答案 1 :(得分:0)
感谢您的努力,我现在就开始工作了。
服务器创建对象的一个非常基本的类是指客户端提供的方法。显然这导致了这个问题。我一定忘记了它,因为它从一开始就存在于那里但不知何故刚刚开始变成一个明显的问题。
对于我的糟糕设计给您带来的任何不便,我深感抱歉。 :)
另外,如何将这个问题标记为已解决而不被不满意?人们是否重视获得接受的答案按钮?我不相信我会发表评论。