如何将行为类用于Swing事件?

如何将行为类用于Swing事件?,swing,jbutton,behavior,java-3d,wakeup,Swing,Jbutton,Behavior,Java 3d,Wakeup,我正在为3D图形编写代码,我希望在用户按下JButton时更新场景图形。我正在尝试使用行为类,但找不到有关使用swing事件唤醒行为的任何信息。我真的很感激任何帮助!谢谢 您可以使用一个特殊的行为对象,该对象包含一个可运行队列。然后,您可以将runnables发布到行为并唤醒它。您必须对适当的同步进行排序,以便只有当队列中没有更多命令时,行为才会进入睡眠状态,但它应该可以工作 使类成为一个单例,以便能够在BehaviorScheduler内运行Runnable,类似于SwingUtilities

我正在为3D图形编写代码,我希望在用户按下JButton时更新场景图形。我正在尝试使用行为类,但找不到有关使用swing事件唤醒行为的任何信息。我真的很感激任何帮助!谢谢

您可以使用一个特殊的行为对象,该对象包含一个可运行队列。然后,您可以将runnables发布到行为并唤醒它。您必须对适当的同步进行排序,以便只有当队列中没有更多命令时,行为才会进入睡眠状态,但它应该可以工作

使类成为一个单例,以便能够在BehaviorScheduler内运行Runnable,类似于SwingUtilities.invokeLater方法

public class ThreadTransferBehavior extends Behavior {
    private final static int POST_ID = 9997;
    private final WakeupOnBehaviorPost m_wakeupPost = new WakeupOnBehaviorPost(this, POST_ID);

    private final Stack<Runnable> commands;


    public synchronized void processStimulus(Enumeration i) {
       while(!commands.isEmpty()) commands.pop().run();
       wakeupOn(m_wakeupPost);
    }

    public synchronized void queueCommand(Runnable r) {
      commands.push(r);
      postId(POST_ID);
    }
}