0

我正在使用 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
    }
}
4

1 回答 1

0

您需要阅读类中字段的限定符:public、protected、private 和“包保护”。

如果没有限定符,该字段实际上是“包保护的”,并且同一个包中的类应该能够按照您指定的方式访问它。如果它在不同的包中,那么它会给你一个编译时错误,说它不能识别另一个类中的字段。

但这是猜测,因为你没有给我们真正的代码,你没有告诉我们错误是什么,你还没有告诉我们你尝试了什么。

rc

于 2013-01-28T04:14:06.157 回答