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 面向对象编程的人尝试将所有内容都设为静态。但正如你所见,这会带来麻烦。正确的解决方案是将静力学的使用限制在真正需要的情况下。这些如下:

  • 共享常量;例如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 回答