Java Swing - running on EDT

前端 未结 4 1500
一整个雨季
一整个雨季 2020-12-06 17:25

I have a couple of questions with regards to Swing and using EDT for GUI updates. I just started reading on this stuff so I am a full beginner in this area:

  1. Wh
4条回答
  •  借酒劲吻你
    2020-12-06 17:37

    1. A good rule is that all operations (access/updates/...) should happen on the EDT. There are a few exceptions mentioned in the javadoc (certain methods of certain classes), but they are so hard to remember that it is easier to stick to the 'do everything on the EDT' approach. Exceptions will not be raised (luckily, JavaFX fixed this shortcoming). You can use a custom RepaintManager to detect most of these violations: see this article.
    2. Everything triggered by the user is handled on the EDT. For example if the user clicks on a button, the actionPerformed of the corresponding Action or ActionListener will be called on the EDT.
    3. Correct
    4. The thing you schedule first will be executed first. The invokeLater call simply adds the Runnable at the end of the queue. Using invokeLater a second time a bit later will add this new Runnable after the previously scheduled Runnable.
    5. Take a look at the code for doneEDT

      private void doneEDT() {
          Runnable doDone = 
              new Runnable() {
                  public void run() {
                      done();
                  }
              };
          if (SwingUtilities.isEventDispatchThread()) {
              doDone.run();
          } else {
              doSubmit.add(doDone);
          }
      }
      

提交回复
热议问题