结合Java Swing和Java3D:并发性能问题
我将Swing和
Java3D结合在一起.挥杆组件的操作应使用事件调度程序线程完成,而Java3D组件的操作应在BehaviourSchedulerThread中完成.
Java3D呈现场景,然后执行与场景相关联的所有行为. 我在Canvas3D上启用了MouseListener.事件发布到AWT事件队列中.然后我想根据这些事件修改Java3D环境,所以我使用一个特殊的行为,我可以在其中发布Runnable.这确保Runnable在Java3D的“行为”循环期间执行(并且在“渲染”循环期间不要修改任何内容). 假设行为中的一些操作想修改Swing模型.然后我必须在EDT上发布一个新的Runnable. 这是正确的做法吗? 使用这种技术,我在鼠标监听器上遇到很多问题.我在Java3D模型中更新了一个点,同时我更新了swing GUI. 更新: 我有一个JButton“spin cube”,它有一个ActionListener.一旦ActionListener被触发,它将AWTEvent推送到Java3D行为.一旦行为触发,它会修改场景图,然后修改JButton actionListener和文本,使其成为“停止旋转”. >点击JButton两次. 实际发生的情况如下: >点击一次JButton两次.两个AWTEvent都被调度到SpinActionListener.这将在J3D行为中创建一个Runnable来执行. 显然,我不应该依赖于AWTEvent的顺序处理.因为任何SwingUtilities.invokeAndWait()会导致死锁,所以我不得不在EDT中等待这个行为. 解决方法
哪个WakeupCriterion用于唤醒您的特殊行为对象?
Java 3D的源代码包括实用程序类 com.sun.j3d.utils.behaviors.mouse.MouseBehavior/MouseRotate 它监听Canvas3D的AWTEvents.可以选择两种选择之一: > MouseListener with WakeupOnBehaviorPost or 此代码示例可能有帮助. 通过SwingUtilities.invokeLater从Behavior.processStimulus方法内启动Swing组件更新不应该导致任何问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |