отключите флажок перед тем, как поток спит - PullRequest
0 голосов
/ 09 июля 2020

Я пытаюсь отключить флажок перед сном, но после нажатия кнопки флажок не отключается перед сном. Если вы спите, флажок будет отключен. Как сначала отключить флажок?

public class Class implements ActionListener {

    private JCheckBox checkbox;
    private JButton button;
    
    public void method() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(235, 168);
        
        checkbox = new JCheckBox("checkbox");
        frame.getContentPane().add(checkbox, BorderLayout.WEST);
        
        button = new JButton("button");
        frame.getContentPane().add(button, BorderLayout.CENTER);
        
        button.addActionListener(this);
        
        frame.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        checkbox.setEnabled(false);
        
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}

1 Ответ

0 голосов
/ 09 июля 2020

Вам следует избегать ожидания в потоке отправки событий AWT, так как это приводит к зависанию вашего приложения. Вместо этого используйте таймер для асинхронного ожидания (см. Как использовать таймеры ). Вот пример:

Timer t = new Timer(0, e -> {
    // This code will run after 5 seconds
});
t.setRepeats(false);
t.setInitialDelay(5000);
t.start();

Если вам нужно запустить длительную операцию, отличную от сна, вы можете использовать SwingWorker. В качестве альтернативы вы можете запустить его в отдельном потоке и использовать invokeLater , чтобы вернуться в основной поток перед манипуляциями с компонентами. См. Параллелизм в Swing .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...