2012-09-28 53 views
0

,我怎麼能在private void jButton1使用myIntprivate void jButton2訪問私有函數的變量考慮下面的代碼中的另一個私有函數

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    int myInt = (Integer)jSpinner1.getValue(); 
} 

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    int b = 0; 
    int c = myInt; 
    do { 
     try { 
      Object newInstance = Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      Connection con = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/rk","root","root"); 
      PreparedStatement ps = (PreparedStatement) con.prepareStatement("INSERT INTO factors VALUES(?,?,?,?,?,?)"); 
      ps.setString(1,jTextField7.getText()); 
      ps.setString(2,jTextField8.getText()); 
      ps.setString(3,jTextField9.getText()); 
      ps.setString(4,jTextField10.getText()); 
      ps.setString(5,jTextField11.getText()); 
      ps.setString(6,jTextField12.getText()); 

      ps.executeUpdate(); 

      jTextField7.setText(""); 
      jTextField8.setText(""); 
      jTextField9.setText(""); 
      jTextField10.setText(""); 
      jTextField11.setText(""); 
      jTextField12.setText(""); 
     } 
     catch (Exception e) { 
      System.out.println(e); 
     } 

     b++; 
    } while(b < my); 
} 

回答

0

變量綁定到Variable Scope。在這種情況下,myInt在一個方法範圍中聲明,然後您試圖從不同的方法範圍訪問它。這不可能。

去解決它,你將不得不在myInt變量提升到全球(類)變量,就像這樣:

private int myInt; 
... 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    this.myInt = (Integer)jSpinner1.getValue(); 
} 
... 

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    int b = 0; 
    int c= this.myInt; 
... 

的將意味着階級範圍內聲明的任何事情都會有機會獲得這變量,這意味着您的變量現在可以從您的所有方法訪問。

+0

謝謝這幫了我 – radish

1

你不能。這些是局部變量,它只在方法調用期間存在。

如果你想在另一種方法使用的值,你要麼有這麼它的國家的一部分,在其穿過的參數,或使其成爲實例(或靜態的,如果你一定要)變量的對象。

基本上,你jButton1ActionPerformed方法目前沒有用處 - 它的值分配給一個局部變量,然後馬上超出範圍。另外,如果您不熟悉Java的基礎知識,我會堅決建議您在控制檯應用程序中學習它們,您不需要處理複雜的用戶界面。學習該語言的基礎知識,然後在用戶界面上啓動一些核心庫(集合,IO等),然後

+0

jButton1ActionPerformed需要獲取微調器值並將其存儲在變量中。 在jButton2我想要使用存儲的值 – radish

+1

@radish:正確 - 因此,它需要的聲音是對象的*狀態*的一部分,因此是一個實例字段。不過,如果這種事情讓你失望,你最好在控制檯應用程序中學習Java的基礎知識。 –

+0

編程新手,也適用於java。感謝您的建議 – radish

0

即使你有你的方法public,你不會已經能夠訪問它的局部變量外..它的範圍僅限於定義方法..

其更好的聲明,在變量場類..

在你的方法jButton1ActionPerformed可變myInt應被聲明爲實例字段,否則不會有任何使用該變量的..你不使用它的任何地方..

0

的唯一方法是將局部變量作爲參數傳遞給其他私人會議HOD。 局部變量(方法中聲明的變量)僅限於該方法。除非你將它們作爲參數傳遞或返回它們,否則不能直接在其他方法中使用它們。 是的,它的私人/公共/保護/默認/靜態標記方法沒關係。

1

將myInt傳遞給字段。

private int myInt; 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    myInt = (Integer)jSpinner1.getValue(); 
} 


private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {           
    int b = 0; 
    int c=myInt; 
    ... 
} 
+0

感謝您的回覆,我現在會嘗試 – radish