1

いくつかの実行ログを表示したいテキストエリアのスイング要素があります。各実行ステップの後にメッセージが表示されます。例: 「フェッチが開始されました」。しかし、問題は、すべてのログ メッセージが、ボタン アクション実行イベントが完了した後に 1 回だけ表示されることです。

getXmlButton = new JButton("Fetch Reports");
    getXmlButton.addActionListener((new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {

            createDirectory();
            stutusArea.append("Fetching has been started");
            final String password = passwordTextField.getText();
            final String username = loginTextField.getText();

            OperatingSystemDriver os = new OperatingSystemDriver();
            driver = os.getDriver();

            stutusArea.append("getting some url");
            driver.get(URL);



           try {
               LoginPage login = new LoginPage(driver);
               login.loginAs(username, password);
               stutusArea.append("successful login"); 
           } catch (Exception e1) {
               stutusArea.append("login error"); 
            }
    insertToDbButton.setEnabled(true);
        }
    }));
4

2 に答える 2

2

別のスレッドを使用する必要があります。そうしないと、GUI がブロックされます。

他のスレッドから GUI を更新することは悪い考えであることに注意してください。 SwingUtilities.invokeLaterを使用して、いくつかの奇妙なエラー/バグを回避してください。

public void actionPerformed(ActionEvent e) {
    new Thread(new Runnable() {
        public void run() {
             SwingUtilities.invokeLater(new Runnable() {
                 public void run() {
                     stutusArea.append("Fetching has been started");
                 }
             })
             final String password = passwordTextField.getText();
             final String username = loginTextField.getText();
             // ...
        }
    }).start();
}
于 2013-03-09T12:57:31.183 に答える
1

ActionPerformedこれは、GUI スレッドですべての作業を行うため、GUI がフリーズし、作業が完了するのを待つためです。ActionPerformedこれを回避する方法はThreadsを使用することです。例があります: Thread Example

于 2013-03-09T12:52:16.787 に答える