这是代码的样子:
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 秒,然后完成其余的行。我尝试将其注释掉,所以我知道这是导致问题的原因。
有谁知道发生了什么?
编辑:所以这基本上是怎么回事.. 老实说,我不知道我还需要向您展示什么,代码中的其他任何内容都与我遇到的问题无关。如果我注释掉删除方法,一切都会很快,但是当它在那里时,它会非常缓慢。