首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事件调度线程绘制

事件调度线程绘制
EN

Stack Overflow用户
提问于 2011-12-27 23:08:54
回答 1查看 353关注 0票数 3

只是一个快速的-我正在编写一个世嘉主系统仿真器。到目前为止的设计是GUI (JFrame子类等)通过EventQueue.invokeLater()调用在事件调度线程中运行,所有模拟器函数都在一个单独的线程中运行。据我所知,这应该是一个很好的实践,因为EDT应该初始化和更新GUI,而Swing并不是线程安全的。

这就引出了一个小问题-控制台在单独的线程(Z80、VDP等)中运行。并且VDP (当我完成它)将更新一个BufferedImage。只要我将这个BufferedImage标记为“同步”,那么从EDT (特别是GUI的画图方法)访问它安全吗?我要求这样做,因为否则我将不得不将大量的VDP逻辑放入画图方法本身,而我不想这样做,因为这样会减缓GUI的整体速度。

简单的问题我知道,但我仍然习惯于推动Java2D的像样的速度动画。值得一提的是,在逻辑线程中调用了there ()方法之后,逻辑线程将一直休眠直到下一个帧传递被唤醒,所以我猜这个设计不会影响性能,对吗?

非常感谢,菲尔·波特

更新I应该使用更好的语言- VDP将通过同步设置器方法访问BufferedImage,而EDT将通过同步getter方法访问它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-28 00:06:28

我不认为您需要使setter和getter同步,因为它们只应该从EDT访问。所以让我们退后一步。你说过将从EDT访问getter -所以我们在这里是线程安全的。现在,使用setter方法将在VDP上运行--为了处理这种情况,我们要调用invokeLater (参见示例)。查看这里获得更多信息。

代码语言:javascript
复制
Runnable updateAComponent = new Runnable() {

    public void run() { 
//this will run in the EDT
component.doSomething(); 

}

};
//this will run in the VDP
SwingUtilities.invokeLater(updateAComponent);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8650195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档