Java Swing – 在EDT上运行
发布时间:2020-12-14 05:07:51 所属栏目:Java 来源:网络整理
导读:我有几个关于Swing的问题,并使用EDT进行GUI更新.我刚开始读这个东西,所以我是这个领域的全新初学者: 在EDT上运行哪些操作?如果不这样,只是提出异议? 有没有特定的时间,我们实际上在EDT自动? 如果我们使用SingUtilities.invoke调度任务,我们将它排队到当
我有几个关于Swing的问题,并使用EDT进行GUI更新.我刚开始读这个东西,所以我是这个领域的全新初学者:
>在EDT上运行哪些操作?如果不这样,只是提出异议? future = new FutureTask<T>(callable) { @Override protected void done() { doneEDT(); setState(StateValue.DONE); } }; 所以我想知道FutureTask是否以某种方式确保invokeLater被调用? 感谢您的所有答案. 解决方法
>一个很好的规则是所有的操作(访问/更新/ …)都应该在EDT上发生.在javadoc(某些类的某些方法)中提到了一些例外,但是很难记住,更容易坚持“在EDT上做所有事情”的方法.异常不会被提出(幸运的是,JavaFX解决了这个缺点).您可以使用自定义RepaintManager来检测大多数这些违规:请参见
this article.
>用户触发的一切都在EDT处理.例如,如果用户点击按钮,则在EDT上调用相应Action或ActionListener的actionPerformed. >正确 >您首先安排的事情将首先执行. invokeLater调用简单地将Runnable添加到队列的末尾.稍后再次使用invokeLater稍后会在之前计划的Runnable之后添加这个新的Runnable. >看看doneEDT的代码 private void doneEDT() { Runnable doDone = new Runnable() { public void run() { done(); } }; if (SwingUtilities.isEventDispatchThread()) { doDone.run(); } else { doSubmit.add(doDone); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |