为简单起见,我已经复制了我遇到的导致问题的关键元素的错误。
我有三个主要类,第一个是初始化和设置方法(main)的主类。然后我有一个数据库类,它将数据从数据库中提取到代码(Init)中。第三,我有一个GUI类来处理GUI元素(访问者)。
我遇到一个问题,当我调用accessor.print()方法时,我在主类(init.setUp)中在数据库类(accessor.setUp)中初始化的变量(消息)显示为null来自ActionListenerEvent之后的GUI类。
我知道这种情况正在发生,因为同一个类有不同的实例,但我不知道如何解决它。
这是主要课程:
public class main {
public static void main(String[] args){
Init init=new Init();
init.setUp();
Accessor acc=new Accessor();
acc.tryAccess();
}
}
这是init类:
public class Init {
public String message;
public void setUp(){
message="Hello World";
}
public void print(){
System.out.println(message.length());
}
}
这是访问者类:
public class Accessor {
public void tryAccess(){
Init init=new Init();
init.print();
}
}
提前致谢。
答案 0 :(得分:2)
你有太多的Init对象,而另一个与另一对无关。很明显,设置一个对另一个没有影响,为了解决这个问题,你只需要一个实例。变化
public class main {
public static void main(String[] args){
Init init=new Init();
init.setUp();
Accessor acc=new Accessor();
acc.tryAccess();
}
}
到
public class main {
public static void main(String[] args){
Init init=new Init();
init.setUp();
Accessor acc=new Accessor(init); // pass it in!
acc.tryAccess();
}
}
然后将参数Init对象传递给Accessor对象中的init字段。
public class Accessor {
private Init init;
public Accessor(Init init) {
this.init = init; // initialize field
}
public void tryAccess(){
// Init init=new Init(); // *** don't create a new instance!! ***
init.print();
}
}