我正在使用eclipse来开发我的程序。我最初并不认为我会继续编写这个程序,所以我在一个主要类中创建了所有类,然后它变成了一个文本墙,所以我决定将它们分成单独的类。
但是现在它们似乎无法访问主程序中的字段,因为它们位于自己的类文件中。我是否需要添加一些修饰符,例如C ++的朋友类?
我在显示错误的行上遇到NullPointerException。我也很困惑,因为当在IDE中写入该行时,它会自动完成说我可以猜测“看到”调用a.doSomething()的选项但是当它运行它时,它认为它是null
示例代码:(这是我遇到的错误的表示,我不能发布整个代码,因为它有多大)
// Suppose AObject is an object that does something and causes no errors.
// BEFORE SPLITING
public class myApp
{
static myApp app = null;
AObject a = null;
public static void main(String[] args)
{
a = new AObject();
app = new CLUtilCompact();
}
public myApp()
{
EventQueue.invokeLater
(
new Runnable()
{
public void run()
{
JFrame mainscreen = new JFrame();
myPanel myP = new myPanel();
mainscreen.add(myP);
mainscreen.setVisible(true);
}
};
)
}
public class myPanel
{
public myPanel()
{
a.doSomething(); // Works fine
}
}
}
// AFTER SPLIT TO CLASS FILES
public class myApp
{
static myApp app = null;
AObject a = null;
public static void main(String[] args)
{
a = new AObject();
app = new CLUtilCompact();
}
public myApp()
{
EventQueue.invokeLater
(
new Runnable()
{
public void run()
{
JFrame mainscreen = new JFrame();
myPanel myP = new myPanel(this);
mainscreen.add(myP);
mainscreen.setVisible(true);
}
};
)
}
}
// SEPERATE CLASS
public class myPanel
{
myApp theApp = null;
public myPanel(myApp arg)
{
theApp = arg;
theApp.a.doSomething(); // Error
}
}
答案 0 :(得分:0)
您需要阅读类中字段的限定符:public,protected,private和“package protected”。
如果没有限定符,该字段实际上是“包受保护的”,并且同一个包中的类应该能够像您指定的那样访问它。如果它在一个不同的包中,那么它会给你一个编译时错误,说它不能识别另一个类中的字段。
但这是猜测,因为你没有给我们真正的代码,你没有告诉我们错误是什么,你没有告诉我们你尝试了什么。
RC