0

私は自分のプログラムを開発するために日食を使用しています。最初はこのプログラムを構築し続けるつもりはなかったので、すべてのクラスを1つのメインクラス内に作成しました。その後、テキストの壁になり、それらを別々のクラスに分割することにしました。

しかし、現在は、独自のクラスファイルにあるため、メインプログラムのフィールドにアクセスできないようです。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、および「package protected」。

修飾子がない場合、フィールドは実際には「パッケージ保護」されており、同じパッケージ内のクラスは指定したとおりにアクセスできるはずです。別のパッケージにある場合は、他のクラスのフィールドを認識しなかったというコンパイル エラーが発生します。

しかし、これは当て推量です。なぜなら、あなたは私たちに実際のコードを提供しておらず、エラーが何であるかを私たちに伝えておらず、何を試したかも伝えていないからです。

ラジコン

于 2013-01-28T04:14:06.157 に答える