2012-12-28 89 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

你可以让你的函数作为非静态或使可移植对象是静态的。

总之,你不能在静态函数中引用非静态变量。

,但你可以在非静态函数引用静态变量