java - 在单独的循环上提取draw()方法(PApplet作为JADE代理)

标签 java multithreading processing agents-jade

我正在 Java 上创建一个基于 JADE 的代理系统,并且我想使用处理来可视化这些代理。现在,JADE 框架独立运行,并且一个Processing PApplet 被实例化为代理之一,它是一个单例。

每当其中一个(其他类型的)代理发生更改时,它们都会调用 PApplet 的 redraw() 方法。问题是,PApplet 不会调用它的 draw() 方法,因为它不在自己的线程上运行。

我该如何解决这个问题?

编辑:

public class Manager extends Agent{
        //The Agent object that runs as a separate thread under JADE framework.
        protected void setup(){
                ...
                javax.swing.SwingUtilities.invokeLater(new VisualizerThreadRunnable(this));
                ...
        }
}
class VisualizerThreadRunnable implements Runnable {
        public VisualizerThreadRunnable(Manager m){
                  ...
        }
        public void run(){
                System.out.println("visualizer being launched...");
                Visualizer visualizer = new Visualizer(manager);
                visualizer.setVisible(true);
        }
}

public class Visualizer extends PApplet {
        //from examples on http://processing.org/tutorials/eclipse/
        public Visualizer(Manager m){
                this.m = m;
                ...
        }
        public void setup() {
                size(200,200);
                background(0);
        }

        public void draw() {
                stroke(255);
                if (mousePressed) {
                        line(mouseX,mouseY,pmouseX,pmouseY);
                }
        }
}

最佳答案

在可视化线程中,您还需要使用 init() 初始化 PApplet:

 public void run(){
                System.out.println("visualizer being launched...");
                Visualizer visualizer = new Visualizer(manager);
                visualizer.init();//This is pretty important
                visualizer.setVisible(true);
        }

欲了解更多信息,请查看PApplet's javadocs .

这应该可以解决处理方面的问题。我以前从来没有用过Jade, 所以我不知道线程是否会继续存在。请检查是否发生这种情况,如果没有,也许您应该保持该线程运行。

关于java - 在单独的循环上提取draw()方法(PApplet作为JADE代理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19920867/

相关文章:

python - 在 Python 中对列表中的每个项目进行线程处理

java - 是否可以对有界队列使用毒丸方法?

camera - 处理相机 frustum() 和 perspective() 旋转

java - Android 处理,库的使用

java - 如何通过netbeans访问SQLyog社区并在其中插入查询?我的代码在下面

java - 将 Apache Spark 与 couchbase 连接

c++ - 为什么不重新锁定互斥锁的 condition_variable 没有等待函数

java - 处理错误中重新启动毫秒

java标准库产生错误的xml 1.1

java - mongodb - 如何使用 java 驱动程序构建多运算符更新语句?