好。我写了上面的代码,我需要从另一个类调用它。我该怎么做?
加上它给我DefaultTableModel prodt = (DefaultTableModel) protable.getModel();
这个错误。错误是非静态变量,不能从静态上下文引用。
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();
}
}
答案 0 :(得分:3)
将变量protable
标记为静态或使方法非静态。
private static DefaultTableModel protable;
public static void refreshProtable() { ... }
答案 1 :(得分:0)
由于该方法是静态的,因此您可以使用它所在的类名来调用它。
E.g
class A {
public static void b() {
// do something
}
}
将被称为如下:
A.b();
刷新自己的静态变量如何工作可能会很方便,这里将是一个起点:http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
答案 2 :(得分:0)
您需要将protable
设置为静态,因为您只能从静态方法访问静态变量。
private static DefaultTableModel protable;
public static void refreshProtable() { }
您尝试调用的变量是实例级变量;
静态变量
它是属于类的变量而不是对象(实例)
静态变量仅在执行开始时初始化一次。在初始化任何实例变量
所有类实例共享的单个副本
静态变量可以直接通过类名访问,不需要任何对象
语法:。
静态方法
静态方法只能访问静态数据。它无法访问非静态数据(实例变量)
静态方法只能调用其他静态方法,不能从中调用非静态方法。
静态方法可以直接通过类名访问,不需要任何对象
语法:。
静态方法无论如何都不能引用“this”或“super”关键字
答案 3 :(得分:0)
您可以将您的功能设为非静态或使可变对象静止。
总之,你不能在静态函数中引用非静态变量。
但您可以在非静态函数中引用静态变量