0

これは私を狂わせています。動作するテキストベースのアプリケーションがあります。現在GUIを必要とする多くの変数があります。私は基本から始めています。ログにデータが送信されるたびに、テキストボックスに表示したいと思います。

これは、データを操作できる場所に渡すための統一されたエントリポイントです。

public class Log {

    private static void consoleOut(String data) {
    System.out.println(data);
    OBD2nerConsole.update(data);
    }
      public static void level0(String data) {
    if (Status.ConsoleLevel >= 0) {
    consoleOut(data);

    }

これは私のフォームで、テキストボックスといくつかのボタンがあります。

public class OBD2nerConsole extends java.awt.Frame {

    public static void update(String data) {
        textField1.setText(textField1.getText() + data);
    }   

}

私が抱えている問題は、私が推測する静的および非静的で作業しているということです。テキストボックスには何も表示されません。遊んで、すべてのエラーを削除しましたが、機能していません。どうしたらいいのかよくわかりません。エラーがないため、これが最適な構成のようですが、テキストボックスは何もしていません。

私はおそらくこれが私の最初のフォームであることを付け加えるべきです!

4

2 に答える 2

3

textField1それが親クラスの属性であると仮定すると、updateメソッドは であってはなりませんstatic。これはもちろん、メソッドをオブジェクトのインスタンスに適用する必要があることを意味しますODB2tunerConsole

Java のルールはstatic、クラスのインスタンスへの参照を明示的に使用して、メソッドがそのクラスの非静的属性およびメソッドにアクセスできないことです。

これにより、Java でのオブジェクト指向プログラミングに慣れていない人は、すべてを静的にしようとするようになります。しかし、ご覧のとおり、それはトラブルにつながります。正しい解決策は、statics の使用を本当に必要な場合に限定することです。これらは次のとおりです。

  • 共有定数。例えばpublic static final String FOO = "foo";
  • 引数の状態のみに依存するヘルパー メソッド。
  • 「シングルトン」パターンを使用して (必要に応じて) 公開された、グローバル データ構造への非表示の参照。
于 2010-07-17T02:36:59.440 に答える
1

LogにOBD2nerConsoleのインスタンスへの静的参照を与え、 update(String)からstaticを削除すると、 textField1を更新できるはずです。

変更されたリストLog.java:

public class Log {
    private static Updatable console = Updatables.getUpdatable();

    private static void consoleOut(String data) {
        System.out.println(data);
        console.update(data);
    }

    public static void level0(String data) {
        if (Status.ConsoleLevel >= 0) {
            consoleOut(data);
        }
    }
}

のリストUpdatable.java:

public interface Updatable {
    void update(String);
}

の変更されたスニペットのリストODB2nerConsole.java:

public class OBD2nerConsole extends java.awt.Frame implements Updatable {
    @Override
    public void update(String data) {
        textField1.setText(textField1.getText() + data);
    }
}

のリストUpdatables.java:

public class Updatables {
    public Updatable getUpdatable() {
        return new ODB2nerConsole();
    }
}
于 2010-07-17T02:36:47.020 に答える