首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合Java3D和Java3D:性能问题与并发性

结合Java3D和Java3D:性能问题与并发性
EN

Stack Overflow用户
提问于 2012-01-13 08:34:42
回答 1查看 796关注 0票数 11

我把Swing和Java3D结合在一起。swing组件的操作应该使用事件分派程序线程来完成,而Java3D组件的操作应该在BehaviourSchedulerThread中完成。

Java3D呈现场景,然后执行与场景关联的所有行为。

我在MouseListener上启用了Canvas3D。事件被提交到AWT事件队列中。然后,我想根据这些事件修改Java3D环境,所以我使用了一种特殊的行为,在这里我可以发布Runnable的命令。这可以确保在Java3D的行为周期中执行Runnable的操作(并且在呈现周期中不要修改anyting )。

假设行为中的一些操作希望修改Swing模型。然后,我不得不张贴一个新的运行到美国东部时间。

这样做对吗?

使用这种技术,我在鼠标侦听器上遇到了很多问题。我在行为中更新了Java3D模型中的一个点,同时更新了swing GUI。

更新:问题可以更明确地定义如下:

我有一个JButton“自旋立方体”,它有一个ActionListener。一旦ActionListener被触发,它就会将AWTEvent推入Java3D行为。一旦行为触发,它就会修改场景图,然后修改JButton actionListener和文本,使其成为“停止旋转”。

  1. 点击JButton两次。
  2. 第一个AWTEvent被分派到SpinActionListener。多维数据集开始旋转,JButton actionListener被修改为JButton,第二个AWTEvent被分派到StopSpinningActionListener。立方体停止旋转,JButton actionListener被修改为JButton

实际发生的情况如下:

  1. 点击JButton两次。这两个AWTEvent都被分派到SpinActionListener。这将创建一个可在Behavior.
  2. The第一AWTEvent中执行的运行程序,启动一个定时器来旋转多维数据集。然后,它向EDT发布一个可运行的命令来修改按钮。
  3. ,第二个AWTEvent启动一个定时器来旋转立方体。立方体现在旋转速度是原来的两倍。然后,它向EDT发布一个可运行的命令来修改按钮.

显然,我不应该依赖AWTEvent按顺序处理。我不能在EDT中等待行为触发,因为任何SwingUtilities.invokeAndWait()都会导致死锁。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-13 17:48:02

哪个WakeupCriterion用来唤醒您的特殊行为对象?

Java3D的源代码包括实用程序类

代码语言:javascript
复制
com.sun.j3d.utils.behaviors.mouse.MouseBehavior/MouseRotate 

听Canvas3D的AWTEvents。可选择两种备选方案之一:

  1. MouseListenerWakeupOnBehaviorPost
  2. WakeupOnAWTEvent.

此代码示例可能会有所帮助。

Behavior.processStimulus方法中通过SwingUtilities.invokeLater启动Swing组件更新不会造成任何问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8847812

复制
相关文章

相似问题

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