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

関数を非静的にするか、protable オブジェクトを静的にすることができます。

つまり、静的関数で非静的変数を参照することはできません。

ただし、非静的関数で静的変数を参照できます

于 2012-12-28T13:45:12.253 に答える