[英]Stopping RMI Server (Java)
我創建了一個成功的 RMI 服務器,感謝上帝:)
它完美地工作.. 我有一個 JForm,它被激活點擊一個按鈕。
雖然我也想創建一個按鈕來停用它,但是我在取消導出它時遇到了問題。
好的,這就是我嘗試導出和終止 RMI 服務器的方式
private void btStopServerActionPerformed(java.awt.event.ActionEvent evt) {
try {
// Nome do objecto
String objectname = txtObjectName.getText();
// obtem o número da porta
int port = Integer.parseInt(txtServerPort.getText());
RemoteMessageObject remote = new RemoteMessageObject();
Registry registry = LocateRegistry.getRegistry(port);
UnicastRemoteObject.unexportObject(LocateRegistry.getRegistry(port), true);
registry.unbind(objectname);
System.out.println("Server offline");
} catch (IOException ex) {
Logger.getLogger(ServerGUI.class.getName()).log(Level.SEVERE, null, ex);
} catch (NotBoundException ex) {
Logger.getLogger(ServerGUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
我得到這個例外:
java.rmi.NoSuchObjectException: object not exported
在線:
UnicastRemoteObject.unexportObject(LocateRegistry.getRegistry(port), true);
我在這里做錯了什么?
解決了................
我之前發現了它 :P 無論如何感謝@EJP 的正確答案。
因此,我的解決方案是在類作為公共變量啟動時創建 Register,因此它可以在兩個單擊事件(啟動服務器和停止服務器)中使用。
我刪除了太多廢話,就像@EJP 所說的那樣,這些內容對於禁用 RMI 服務器來說是不必要的。
它現在以這種方式工作:
private void btStopServerActionPerformed(java.awt.event.ActionEvent evt) {
try {
// Nome do objecto
String objectname = txtObjectName.getText();
// obtem o número da porta
int port = Integer.parseInt(txtServerPort.getText());
Registry registry = LocateRegistry.getRegistry(port);
UnicastRemoteObject.unexportObject(this.registry, true);
registry.unbind(objectname);
System.out.println("Server offline");
} catch (IOException ex) {
GuiUtils.addText(txtLog, "Erro", "Servidor desligado");
btStopServer.setEnabled(false);
btStartServer.setEnabled(true);
} catch (NotBoundException ex) {
Logger.getLogger(ServerGUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
您需要LocateRegistry.createRegistry().
導出LocateRegistry.createRegistry().
返回的對象LocateRegistry.createRegistry().
getRegistry()
返回的對象不是實際的Registry
對象,它是一個存根,您不能取消導出它們。
但是unbind()
導出注冊表然后調用unbind()
沒有意義。 反過來做有一點意義,但意義不大。
而且您還必須取消導出您自己的遠程對象。
在試圖取消導出現有對象的方法中創建新的遠程對象也沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.