2012-11-05 191 views
0

我有三個類 - 創建類2(GUI)的實例的類1,實現GUI的類2和嘗試更新GUI的類3。從另一個類訪問Java Swing GUI

在1 I類創建這樣的GUI:

s = new ServerSocket(6067);   

//while(true){        

    Socket ClientSocket = s.accept(); // Accept connections 

    // Create instance of the GUI (class 2) on a new thread  
    work w = cpd.new work(); 

    Thread t = new Thread(w); 
    t.start(); 


    // Create instance of class 3 that uses the GUI on a new thread    
    Charger cpt = new ChargingPoint(ClientSocket, w.gui); 
    cpt.start();             
//} 


class work implements Runnable{ 

    GUI gui; 

    public void run(){ 

     try{ 

      gui = new GUI(); 
      gui.setVisible(true);     
     } 

     catch(Exception e){} 

    } 
} 

在2 I類實現GUI,並有一些方法允許它被更新此如一個:

public void updateConsole(String text){ 
    Console.append(text + "\n"); 
} 

在第3課中,我嘗試使用下面的這些方法,但是代碼在達到如下陳述時卡住了:

gui.updateConsole("Data: " + data); 

當我將GUI類(2類)作爲主類時,這已經適用於我。我將這個實例傳遞給所有其他類,他們可以讓我們更新GUI而不會有任何問題。但是,這次我從另一個類(類1)創建GUI,並且此方法不再有效,我正在努力解決原因。

任何建議將非常感激。

+0

只是一個說明。您似乎在跟蹤回調模式。 請參閱http://en.wikipedia.org/wiki/Callback_(computer_programming) – Tinman

+2

java約定是類應始終以大寫字母開頭。 – Tinman

+1

錯誤是什麼?這聽起來像你不再將需要的引用傳遞給需要它們的類 – MadProgrammer

回答

0

我會試着給你提供工具來自己調試它。

嘗試使用eclipse或類似的調試器。 http://www.vogella.com/articles/EclipseDebugging/article.html

首先檢查class2實際上是否調用回gui類的正確實例。

使用調試器,您可以找到'對象ID'。這會告訴你內存中對象的唯一ID。它通常是內存指針。檢查ChargingPoint中的ID是否與Work類中創建的ID匹配。在錯誤的類上運行方法是回調最常見的錯誤。

然後繼續在您的gui.updateConsole中放置一個斷點並進入代碼。

這應該很快顯示出問題。

Regards