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();
    }
}
4

4 回答 4

3

将变量标记protable为静态或使方法为非静态。

private static DefaultTableModel protable;

public static void refreshProtable() { ... }

于 2012-12-28T13:41:03.773 回答
0

由于该方法是静态的,因此您可以使用它所在的类名来调用它。

例如

class A {
    public static void b() {
        // do something
    }
}

将被称为如下:

A.b();

重新了解静态变量的工作方式可能会很方便,这将是一个起点:http ://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

于 2012-12-28T13:42:34.490 回答
0

您需要将其protable设为静态,因为您只能从静态方法访问静态变量。

private static DefaultTableModel protable;

public static void refreshProtable() { }

您尝试调用的变量是实例级变量;

静态变量

  • 它是一个属于类而不属于对象(实例)的变量

  • 静态变量只在执行开始时初始化一次。这些变量将首先被初始化,在初始化任何实例变量之前

  • 由类的所有实例共享的单个副本

  • 静态变量可以通过类名直接访问,不需要任何对象

  • 句法 : 。

静态方法

  • 它是属于类而不属于对象(实例)的方法
  • 静态方法只能访问静态数据。它不能访问非静态数据(实例变量)

  • 静态方法只能调用其他静态方法,不能从中调用非静态方法。

  • 静态方法可以通过类名直接访问,不需要任何对象

  • 句法 : 。

  • 静态方法无论如何都不能引用“this”或“super”关键字

于 2012-12-28T13:43:15.120 回答
0

您可以将函数设为非静态或将可移动对象设为静态。

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

但您可以在非静态函数中引用静态变量

于 2012-12-28T13:45:12.253 回答