Tom
Tom

Reputation: 109

Swing invokelater freeze

im calling invokeLater direcly from button on actionPerformed with this code:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
   SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            int temp = (jComboBox1.getSelectedIndex() + 1);
        heavyProccesingFunction();
        }
   });
} 

and that still freezes the GUI. Why? I get the same result without using the invokelater function.

should I Use

Thread queryThread = new Thread() {
      public void run() { 

instead?

Edit:

Thanks, new thread should be used.

Upvotes: 3

Views: 1028

Answers (1)

Jon Skeet
Jon Skeet

Reputation: 1500235

invokeLater still ends up running the code on the dispatcher thread - just later. The aim of invokeLater is to allow background threads to post work on the event dispatcher thread.

It sounds like you should indeed create another thread - or use a thread pool for the same sort of effect, or SwingWorker for example. Whatever you do, you need to avoid running your slow method on the event dispatcher thread.

Upvotes: 5

Related Questions