我正在 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/