任何人都可以解释为什么以下代码打印出这个?: 服务器:是的 客户:假
isShowing()
只是Component
中定义的布尔值的getter - 不应该正确序列化吗?
public interface RMIInterface extends Remote {
public JFrame getJFrame() throws RemoteException;
}
public class RMIClient {
public static void main(String args[]) throws Exception {
Registry registry = LocateRegistry.getRegistry(1099);
RMIInterface server = (RMIInterface) registry.lookup("myService");
JFrame frame = server.getJFrame();
System.out.println("Client: " + frame.isShowing());
}
}
public class RMIServer implements RMIInterface {
private JFrame frame;
protected RMIServer() {
createAndShowGUI();
}
private void createAndShowGUI() {
frame = new JFrame("FrameDemo");
frame.pack();
frame.setVisible(true);
}
@Override
public JFrame getJFrame() {
System.out.println("Server: " + frame.isShowing());
return frame;
}
public static void main(String[] args) throws Exception {
Registry registry = LocateRegistry.createRegistry(1099);
RMIServer server = new RMIServer();
RMIInterface stub = (RMIInterface)UnicastRemoteObject.exportObject(server, 0);
registry.bind("myService", stub);
}
}
答案 0 :(得分:0)
您正在混淆isShowing()
和isVisible()
。 visible
只是boolean
属性,但showing
暗示实际显示在屏幕上,并且AWT组件在它们被反序列化时从不显示。您必须在反序列化后在组件层次结构的setVisible(true)
祖先(即Window
)上调用JFrame
才能显示它。
确定此组件是否在屏幕上显示。这意味着组件必须是可见的,并且它必须位于可见并显示的容器中。
检查此窗口是否显示在屏幕上。