JFrame не рисует содержимое, показывает только белый прямоугольник, когда он становится видимым внутри ActionListener - PullRequest
0 голосов
/ 12 марта 2012

У меня есть приложение, в начале отображается Jframe, пользователь вводит URL веб-страницы, которая должна быть проанализирована, затем пользователь нажимает кнопку ОК.

Когда пользователь нажимает кнопку ОК, actionListener должен сделать следующее:должен отобразить новый Jframe с текстом «пожалуйста, подождите, анализ веб-сайта, это может занять немного времени», затем он должен запустить метод analyPage ().

проблема в том, что после того, как пользователь нажимает кнопку «ОК», новый Jframeотображается, но оно пустое, только с белым прямоугольником внутри.Только после завершения метода analyPage () (то есть через много секунд) отображается содержимое Jframe.

    static class OKListener implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        new WaitFrame();
// mf is main frame (the first frame where url was entered and where OK was clicked)
        mf.setEnabled(false);
        address = mf.getURLtext();
        analyzePage();
    }
}

public class WaitFrame extends JFrame {

public WaitFrame() {
    super();
    JFrame wait = this;
    JLabel jl = new JLabel("Čakajte prosím, analyzujem stránku, môže to chvíľu trvať.");
    JPanel jp = new JPanel();
    jp.add(jl);
    wait.getContentPane().add(jp);
    wait.pack();
    wait.setVisible(true);
}
}

1 Ответ

1 голос
/ 12 марта 2012

Запустите свой JFrame в AWT-Thread:

//...
java.awt.EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
        JFrame waitFrame = new JFrame();
        //...
        waitFrame.pack();
        waitFrame.setVisible(true);
    }
});
//...
// Other things to do ...
// dispose Frame after all, if neccessry ...
...