我似乎有一個困境。避免我的項目的複雜細節,我試圖做到以下幾點。 (不包括和更換像進口一些代碼和的try-catch爲簡單起見)Java RMI的註冊表和接口對象是否可以在全局中聲明爲靜態的?
1 public class Client
2 {
3 private Registry reg1;
4 private GameSessionInterface sesh1;
5
6 public static void main(String[] args)
7 {
8 reg1 = LocateRegistry.getRegistry(serverIP, 4200);
9 sesh1 = (GameSessionInterface)reg1.lookup("Session1");
10 }
11 }
在8號線和9我得到的錯誤「不能讓一個靜態引用非靜態字段REG1」和「無法分別對非靜態字段sesh1」進行靜態引用。
如果我聲明reg1和sesh1裏面的主,我不明白這個問題。但我需要在最低限度sesh1是全球性的,所以我可以使方法訪問它的主要之外。
我不是100%確定RMI變量如何在JVM中工作,所以我不確定將它們聲明爲靜態是否安全。因爲我不打算在相同的JVM中創建多個Client的實例,所以它應該沒有關係,但考慮到這是對遠程對象的引用,我不知道這是否是這樣會有一些看不見的副作用。我搜索了一段時間,似乎沒有人解決這個問題。但同時,我似乎無法找到靜態聲明的代碼示例,這也引發了一個問題,爲什麼我不能像其他地方使用全局非靜態聲明時存在的類似代碼那樣對其進行編譯。
我真的是新來的Java在RMI,所以如果你有任何人有更多的RMI經驗可以揭示一切如何交互,爲什麼我可能會得到這個錯誤,我將不勝感激。
在此先感謝!