2012-12-28 86 views
0

好的。我寫了上面的代碼,我需要從另一個類中調用它。我該怎麼做? 加上它給了我這個錯誤DefaultTableModel prodt = (DefaultTableModel) protable.getModel();。該錯誤是非靜態變量protable不能從靜態上下文中引用。調用方法?

public static void refreshProtable() { 
    try { 
     Statement s1 = Db.connectDb().createStatement(); 
     ResultSet rs1 = s1.executeQuery("SELECT * FROM product WHERE status='" + 0 + "'"); 

     DefaultTableModel prodt = (DefaultTableModel) protable.getModel(); 
     while (rs1.next()) { 
      Vector v1 = new Vector(); 
      v1.add(rs1.getString("pid")); 
      v1.add(rs1.getString("pname")); 
      v1.add(rs1.getString("sp_rt")); 
      v1.add(rs1.getString("sp_wh")); 
      v1.add(rs1.getString("um")); 
      Statement s2 = Db.connectDb().createStatement(); 
      ResultSet rs2 = s2.executeQuery("SELECT * FROM stock WHERE pid='" + rs1.getString("pid") + "'"); 
      if (rs2.next()) { 
       v1.add(rs2.getString("qty")); 
      } 
      prodt.addRow(v1); 
      s2.close(); 
     } 
     s1.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+1

請添加一個語言標籤 - 不僅是幫助別人確保你正在使用什麼語言,也應該允許語法高亮正常工作在你的代碼上。 –

+1

請包括您聲明protable的代碼。 – Mansfield

回答

3

無論是紀念你的變量protable靜態或使該方法非靜態。

private static DefaultTableModel protable;

public static void refreshProtable() { ... }

+0

但我需要在點擊一個按鈕後從另一個類中調用此方法?如果我使該方法非靜態,我仍然可以調用它嗎? –

+1

您需要在點擊按鈕期間創建該類的實例,然後調用該方法。 – Srinivas

0

您需要將protable設置爲靜態,因爲您只能從靜態方法訪問靜態變量。

private static DefaultTableModel protable; 

public static void refreshProtable() { } 

您試圖調用的變量是實例級變量;

靜態變量

  • 它是屬於類和不反對(實例)

  • 靜態變量被初始化僅僅一次,在執行開始的變量。這些變量將首先被初始化,任何實例變量

  • 單拷貝由一個靜態變量可以直接通過類名和沒有按」訪問的類

  • 的所有實例共享的初始化之前t需要任何物體

  • 語法:。

靜態方法

  • 它是屬於類,而不是到所述對象(實例)
  • 靜態方法只能訪問靜態數據的方法。它不能訪問非靜態數據(實例變量)

  • 靜態方法只能調用其他靜態方法,不能調用其中的非靜態方法。

  • 靜態方法可以直接通過類名來訪問,並且不需要任何對象

  • 語法:

  • 靜態方法不能引用「這個」或「超級」的關鍵字,反正

0

你可以讓你的函數作爲非靜態或使可移植對象是靜態的。

總之,你不能在靜態函數中引用非靜態變量。

,但你可以在非靜態函數引用靜態變量