コードは次のようになります。
class Main extends JFrame {
public MyPanel panel;
public Main() {
//all the frame init stuff
panel = new MyPanel(this);
Panel badPanel = new Panel();//this makes the remove method go veryy slow
//add(badPanel, BorderLayout.SOUTH);//
JPanel goodPanel = new JPanel();
add(goodPanel, BorderLayout.SOUTH); // this fixes the slowness of the remove method in calculate()
add(panel, BorderLayout.CENTER);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Main main = new Main();
}
});
}
}
class MyPanel extends JPanel {
Main main;
public MyPanel(Main main) {
this.main = main;
//init everything
}
public void calculate() {
MyPanel newPanel = new MyPanel(main);
//do some computation
main.remove(main.panel);
main.add(newPanel, BorderLayout.CENTER);
main.panel = newPanel;
main.revalidate();
}
}
したがって、すべてが正常に機能します。メソッドに到達したときに何らかの理由でremove()
実行時間が非常に遅く、少なくとも5秒間一時停止してから、残りの行を終了します。コメントアウトしてみたので、それが問題の原因であることがわかりました。
誰が何が起こっているのか知っていますか?
編集:これは基本的に何が起こっているのかです..私は正直に私があなたに示す必要がある他のものを知りません、コードの他の何も私が経験している問題とは何の関係もありません。removeメソッドをコメントアウトすると、すべてがすばやく機能しますが、そこにあると非常に遅くなります。