2014-06-09 23 views
0

我應該將JTextField UserDisp的文本設置爲從登錄表單中檢索的用戶名,但會顯示錯誤。變量用戶的值來自輸入登錄表單的用戶名。使用來自另一個java文件的文本設置JTextField的內容

錯誤顯示:

的代碼如下「非靜態變量UserDisp不能從靜態上下文引用的」:

public static void main(final String user) { 

    //look and feel codes are omitted 

    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      String name = "Welcome "+user+"!"; 
      UserDisp.setText(name); 
      new MainMenu().setVisible(true); 

     } 
    }); 
} 
+2

* 「..但錯誤出現。」 *什麼錯誤? 1)總是複製/粘貼錯誤和異常輸出。 2)爲了更快地獲得更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整和可驗證示例)。 –

回答

1

當類裝入JVM,另一方面實例變量初始化靜態變量對每個實例使用不同的值,當一個對象的實例是,他們得到創造通過使用new()運算符或使用反射如Class.newInstance()創建。

因此,如果您嘗試訪問非靜態變量沒有任何實例編譯器會抱怨,因爲尚未創建這些變量和他們沒有任何存在,直到創建一個實例,它們與任何實例相關聯。所以在我看來,只有在靜態上下文中不允許非靜態或實例變量纔有意義的理由是不存在實例。

所以你的情況,你需要創建MainNenu對象,然後設置用戶名文本,然後顯示菜單。

例如:

MainMenu menu = new MainMenu(); 
menu.setUserDispNameText(name); 
menu.setVisible(true); 

更多here

0

這裏的問題在於,主要的方法是靜態的,一個良好的解決方法,這將是創建一個實現Runnable類和具有它的構造接受的run方法的登錄信息作爲參數, ,使用獲得的設置文本的價值。

public class MyRunnable implements Runnable { 

    private String user; 

    public MyRunnable(final String user) { 
     this.user = user; 
    } 

    @Override 
    public void run() { 
     // now use the user variable to set the text. 
    } 

} 
在main方法

java.awt.EventQueue.invokeLater(new MyRunnable(user)); 
相關問題