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

Java 在单独的循环上提取draw()方法(PApplet作为JADE代理),java,multithreading,processing,agents-jade,Java,Multithreading,Processing,Agents Jade,我正在Java上创建一个基于JADE的代理系统,我想使用处理来可视化这些代理。现在JADE框架自己运行,处理PApplet被实例化为一个代理,这是一个单例 每次一个(其他类型的)代理发生更改时,它们都会调用PApplet的redraw()方法。问题是,PApplet没有调用它的draw()方法,因为它没有在自己的线程上运行 我该如何解决这个问题 编辑: 在visualizer线程中,还需要使用init()初始化PApplet: 有关更多信息,请查看 这应该可以解决问题的处理方面。我以前从未用过玉

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

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

我该如何解决这个问题

编辑:


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

有关更多信息,请查看

这应该可以解决问题的处理方面。我以前从未用过玉,
所以我不知道这根线是否会继续。一定要检查是否发生了这种情况,如果没有,也许你应该让线程继续运行。

你能发布一些代码吗?您正在初始化PApplet实例吗?如果是,怎么做?我粗略的猜测是,帕普莱特的线索没有开始。谢谢!:)我认为你是对的——我没有注意到这一点,因为这是一个未经测试的处理范例——网络上的所有示例都指向处理,将其他进程作为线程进行管理。无论如何,在意识到我的需求更适合于普通Java
swing
GUI之后,我转向了普通Java
swing。(菜单等)不用担心。如果只是几行或简单的图形,那么使用Swing的图形相关类是有意义的。现在您还知道了如何将处理与swing集成在一起,以防万一,作为一个补充说明,您可以使用Processing的get()函数获取草图的“屏幕截图”,将其作为一个PImage,并将其转换为一个buffereImage…但这是一个很难解决的问题
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);
                }
        }
}
 public void run(){
                System.out.println("visualizer being launched...");
                Visualizer visualizer = new Visualizer(manager);
                visualizer.init();//This is pretty important
                visualizer.setVisible(true);
        }