2013-01-20 31 views
2

我正在Java中工作,我試圖在使用OK命令和後退命令的可視化設計之間切換。我有一個可顯示的表格,我在我的主類A.java中命名爲formA,在另一類B.java中命名爲formB。我在formA中使用了一個ok命令,在選擇時,應該讓用戶登錄到formB。起初,當我嘗試從我的主類中調用getFormB方法時,它不起作用(非靜態方法不能從靜態上下文中引用)。如何切換到具有主要方法的Displayable類

我勸創建到B.java的引用,以便我在主類中加入這一行A.java

B b = new B(this); 

現在我可以formA從我的commandAction調用getFormB方法。在這一點上,一切運作良好,但當我試圖添加一個backCommand應該帶我回到formAA.java我再次得到ds錯誤'非靜態方法getFormA()不能從靜態上下文引用',所以我試圖創建在B.java同樣的方式我A.java做一個參考,下面的代碼:

A a = new A(); 

在backCommand然後在命令動作我做了DS:

switchDisplayable(null, a.getFormA()); 

這一次,沒有出現任何錯誤。但在運行時,我得到一個SecurityException MIDlet管理器錯誤:

Illegal attempt to construct [email protected]

'hello'是包含兩個java文件的軟件包。

任何人都可以幫我嗎?

+0

任何人都可以請幫我 – degee

回答

2

看來你的A類擴展了MIDlet。如果是這種情況,你不應該嘗試做一個新的實例。
您應該爲您的B類添加一個A屬性並接收該實例作爲構造函數參數或者使用setter方法。
有了這個,你可以從屬性調用getFormA()方法。
更新

public class A extends MIDlet { 
    B b; 

    public A() { 
    b = new B(this); 
    } 
} 

class B { 
    A a; 

    B(A a) { 
    this.a = a; 
    } 

    public void commandAction(Command c, Displayable d) { 
    switchDisplayable(null, a.getFormA()); 
    } 
} 
+0

是A類擴展的MID​​let。我可以在B類pls上添加屬性的代碼示例,以及如何使用setter方法pls,因此我瞭解如何在代碼 – degee

+0

中實現它們。請檢查更新後的答案。 –

+0

它編譯,沒有錯誤。但是在運行時我得到一個NullPointerException。爲什麼會發生這種情況,我該如何解決這個問題pls – degee