我正在尝试访问一个非静态的表单,这个表单也不是静态的。我想在课堂上使用一名成员....
Public Class MainForm
public void setConsoleText(String Text){
jTextArea1.append(Text);
}
我需要知道一种从我的类“Log”引用这个setter的方法,它基本上是解析和记录数据的地方。我希望它是这样的:
private void consoleOut(String data) {
System.out.println(data);
MainForm.setConsoleText("data");
}
我无法访问此方法..我只能访问MyForm.Class。有没有办法引用已实例化的那个,或者这个虚拟机中的所有实例?这无关紧要,因为在这个Java VM实例中只会运行其中一个。
我似乎无法想出这个。
答案 0 :(得分:2)
您需要为Log提供一个非静态MainForm变量,并将对当前可视化MainForm对象的引用传递给Log类和此变量。这可以通过Log构造函数参数或通过setter方法完成。然后你可以在这个实例上调用方法(但是先检查它不是null)。类似的东西:
public class Log {
private MainForm mainForm; // our MainForm variable
public Log(MainForm mainForm) {
// setting the MainForm variable to the correct reference in its constructor
this.mainForm = mainForm;
}
private void consoleOut(String data) {
System.out.println(data);
if (mainForm != null) {
// now we can use the reference passed in.
mainForm.setConsoleText("data");
}
}
}
修改1
例如,如果您创建MainForm对象并从某个main方法显示它,请随之创建Log并将可视化的MainForm传递给Log构造函数,如下所示:
public static void main(String[] args) {
MainForm myMainForm = new MainForm();
// ... whatever code is necessary to set up the
// ... MainForm object so it can be visualized
myMainForm.setVisible(true); // and show it
Log myLogObject = new Log(myMainForm);
//...
}
请注意,如果这对您没有帮助,则需要发布更多代码。