我正在阅读this本书中的网络和java。
问题是我正在尝试做一本本书上列出的示例,它是在第153页至第159页(段落 5.4使用RMI有意义)。
我做了一些更改,主要是他使用旧的Vector我用ArrayList替换它。同样在客户端,我做了一些小改动:
public static void main(String[] args) {
try {
// Obtain a reference to the object from the
// registry and typecast it into the appropriate
// type...
String name = "//localhost/Service1";
Stp temp = (Stp) Naming.lookup(name);
ArrayList<Account> acc = temp.getAccs();
System.out.println(acc);
for (Account cnt : acc) {
if ("george".equals(cnt.name)) {
cnt.get(10);
System.out.println(cnt);
}
}
} catch (ConnectException conEx) {
System.out.println("Unable to connect to server!");
System.exit(1);
} catch (Exception ex) {
ex.printStackTrace();
System.exit(1);
}
}
它工作正常,或几乎没问题。当从客户端调用get(int number)方法时(它应该减少平衡),它实际上完成了它的意图。问题是,如果我从另一个cmd窗口打开另一个客户端,或者即使我再次运行同一个客户端,它也不会进一步降低余额值。如果余额为100且客户端运行get(10)
,他将看到90.但如果客户端代码再次运行另一个get(10)
,则余额不会更新并再次保留90.它应该是80岁。
感谢您的任何信息!
答案 0 :(得分:0)
那是因为ArrayList是可序列化的而不是远程的。您的客户端下载了它的副本,并对其中的一个元素执行了操作,该元素也在您的JVM中。另一位客户做了同样的事情。没有人对服务器JVM中的元素做任何事情,所以它没有改变。您需要在界面中添加远程方法。