Eclipse,定义了主程序中的所有类。拆分为单独的类文件后程序不起作用

时间:2013-01-28 03:09:53

标签: java class

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

1 个答案:

答案 0 :(得分:0)

您需要阅读类中字段的限定符:public,protected,private和“package protected”。

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

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

RC