0

新しい質問。前の質問の手順に従ってプログラムを調整した後: 実際のオブジェクトを作成せずに、既に実行中のクラスのインスタンスにアクセスする方法

私は新しい奇妙な問題を思いついた。コンストラクターを介して I の参照を G に渡し、その参照を使用して G から I を操作します。その関数を「戻るボタン」にマップしました。問題: [戻る] ボタンを押して I フレームを調整し、[完了] ボタンをクリックすると、I インターフェイスが非表示になり、G フレームが表示されます。I の新しい明確なインスタンスを単純に作成する別のボタンがあります。それを押すと、大量の I インスタンスが開きます ([戻る] ボタンを押した回数に正比例します)。大規模なデバッグの後、私はまだ困惑しています...おそらく、作成するスレッドが多すぎることに問題があります...わかりません..ここにいくつかのコードスニペットがあります:

G コンストラクター:

 public GUI(Intro i) {
    this.intro = i;
    make();
    layout();
    layout2();
    layout3();
    invalid();
    setEnable();
}

戻るボタンのコード:

private class BackToSetUp implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent arg0) {
        intro.frame.setVisible(true);
        frame.dispose();
    }

}

リセットボタンのコード:

private class ResetProgram implements ActionListener{

    @Override
    public void actionPerformed(ActionEvent arg0) {
        frame.dispose();
        frame2.dispose();
        frame3.dispose();
        frame4.dispose();
        Runnable runnable = new Runnable() {
            public void run() {

                intro = new Intro(); 
                intro.setVisible(true);

            }
        };
        EventQueue.invokeLater(runnable);


    }

}

完了ボタンのコード:

class Done implements ActionListener {
    GUI g = new GUI();
    @Override
    public void actionPerformed(ActionEvent e) {

        for (int i = 0; i < 9; i++) {
            System.out.println(array[i]);
        }

        g.setArray(array);
        System.out.println(array);
        setText();
        frame.setVisible(false);
        g.setVisible(true);
        g.setVisible2(false);
        //if (g.clear.isSelected()) {
        //  frame.setVisible(true);
        //}
    }
4

1 に答える 1