Jav*_*aSa 14 java swing javasound jpanel event-dispatch-thread
1.考虑我的代码是在我的JPanel的某些行上,我是否自动在EDT上?
2.对于不属于GUI,JPanels或其他视图类,简单逻辑类的所有其他类的同名问题.
3.如果我有JPanel我正在播放音乐,那么音乐应该在事件发送线程上运行还是在非EDT的其他线程上运行(因为我没有遇到任何运行问题)来自EDT)?
注意:我想要一般规则如何在不使用SwingUtilities.isEventDispatchThread()
Thanks的情况下了解它
mil*_*ose 23
如果在EDT外部运行的代码调用GUI类中定义的方法,则该代码不会在EDT上运行,而是在调用线程中运行.
如果在EDT中运行的代码调用非GUI类中定义的代码,则该代码将在EDT上运行.
规则是,如果您没有创建不同的线程,那么您调用的方法将在调用代码所运行的线程上运行 - 线程与定义的类方法不对应.
在EDT上运行的方法是事件监听器,当它们被Swing调用时 - 而不是你.(如果你从EDT打电话给他们,他们仍然可能会这样.)
此外,内部的任何代码Runnable.run()
的方法传递给SwingUtilities.invokeLater()
和invokeAndWait()
也对EDT运行.
您从EDT调用的任何常规方法都将在EDT上运行.
从Thread
您创建的任何代码调用(无论是直接使用线程,还是ExecutorService
或者SwingWorker.doInBackground()
)都不在EDT上.您的计划main()
方法也不在EDT上.
根据我的评论:当所有其他方法都失败时,SwingUtilities类有一个静态方法,你可以使用:SwingUtilities.isEventDispatchThread()
关于数字3)肯定使用后台线程.
据我所知,没有"一般规则".你的GUI中的代码应该在EDT上,但是如果你在某个地方有bug,它可能不是,尽管通常是.对于Swing监听器也是如此.
归档时间: |
|
查看次数: |
7677 次 |
最近记录: |