这让我疯了。我有一个基于文本的工作应用程序。它有许多变量,现在需要一个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);
}
}
我所遇到的问题是,我正在使用静态和非静态的工具。我猜测。文本框中没有显示任何内容。我一直在玩,并删除所有的错误,但它不起作用。我真的不知道该怎么做。看来这是最好的配置,因为没有错误,但文本框没有做任何事情。
我应该补充一点,这是我的第一个表格!
答案 0 :(得分:2)
假设textField1
是父类的属性,update
方法不应该是static
。这当然意味着您需要将该方法应用于ODB2tunerConsole
对象的实例。
Java中的规则是static
方法无法通过显式使用对类实例的引用来访问其类的非静态属性和方法。
这使得那些刚接触Java的面向对象编程的人试图让一切都变得静态。但是如你所见,这会导致麻烦。正确的解决方案是将静态的使用限制在真正需要它们的情况下。具体如下:
public static final String FOO = "foo";
答案 1 :(得分:1)
如果您为 OBD2nerConsole 提供 Log 静态引用,并从 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();
}
}