0

JFrame基本的な通知 JFrame クラスのインスタンスを作成するメインがあります。

メインから通知を作成するコードはJFrame次のようになります。

new Notification(from, msg, time);

通知クラス内からどのようにメインにアクセスできるのか疑問に思っていますJFrameJFrame基本的に、通知クラス内からメインのいくつかのコンポーネントの setVisible を変更したいと考えています。

編集

私のclient.java(メインJFrame)は通知を呼び出します

public JPanel pnlMidMenuButtons;
/**** code... **/
Notification ntf = new Notification(from, msg, time); // Further down the notification is being called

インポートUI:

public class ImportUI extends Client implement NotificationParent {

public void setImportantFieldsVisible(boolean visible) {
    pnlMidMenuButtons.setVisible(visible);
}

}

通知の親:

public interface NotificationParent {
    public void setImportantFieldsVisible(boolean visible);
    public void setAgentName(String agentName);
}

そして私の通知クラス:

public class Notification extends JFrame {

    private NotificationParent parent;
    /*...*/

    public Notification(NotificationParent parent, String from, String msg, Date time) {
        this.parent = parent;
        parent.setImportantFieldsVisible(false); // Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    }

}

例外の原因は何ですか?

4

1 に答える 1

1

実際の答えはあなたのニーズによって異なりますが、私はinterface(または、いくつかのオブジェクトにいくつかの機能を提供し、他のオブジェクトには提供したくない場合は、一連のインターフェイスを作成します)。

public interface NotificationParent {
    public void setImportantFieldsVisible(boolean visible);
}

次に、このインターフェイスを呼び出し元に実装します...

public class ImportUI extends ... implements NotificationParent {
    /*...*/
    public void setImportantFieldsVisible(boolean visible) {
        //....
    }
}

次に、追加のパラメーターから へのNotification参照を受け入れることができるようにしNotificationParentます...

public class Notification extends ... {

    private NotificationParent parent;
    /*...*/

    public Notification(NotificationParent parent, String from, String msg, Date time) {
        this.parent = parent;
        /*...*/
    }

}

次に、必要に応じて、利用可能なメソッドの 1 つを呼び出して、要件を満たすことができます。

明らかに、より多くのメソッドを使用できますが、それは要件次第です...

于 2013-09-16T07:26:38.163 に答える