Java 在2线程应用程序上共享图像

Java 在2线程应用程序上共享图像,java,Java,我使用的是processing,一个面向有图形思维的人的库。www.processing.org。 在处理过程中创建两个窗口并不常见。 我做到了,当我在两个帧上使用一个图像时,1的绘制速度非常慢。 但是帧速率仍然很快(你可以通过蓝色椭圆看到,它仍然很快) 我制作了一个视频来展示: 有人能解释一下是什么原因造成的,我怎样才能摆脱它 import processing.core.*; public class MyProcessingSketch extends PApplet {

我使用的是processing,一个面向有图形思维的人的库。www.processing.org。 在处理过程中创建两个窗口并不常见。 我做到了,当我在两个帧上使用一个图像时,1的绘制速度非常慢。 但是帧速率仍然很快(你可以通过蓝色椭圆看到,它仍然很快)

我制作了一个视频来展示:

有人能解释一下是什么原因造成的,我怎样才能摆脱它

import processing.core.*;

public class MyProcessingSketch  extends PApplet  {

    int id;

    Data d;

    public static void main(String args[]) {

        PApplet.main(new String[] { "MyProcessingSketch", "0" });
        PApplet.main(new String[] { "MyProcessingSketch", "1" });

    }

    public void init() {
        super.init();

        id = parseInt(args[args.length - 1]);
        PApplet.println("init:"+id);

        d = Data.getInstance();

        delay(1000);


    }


    public void setup() {

        size(800, 600);
        if (id == 0) {
            d.createGraphics(this);
        }
        smooth();
    }

    public void draw() {


        background(0, 255, 0);

        if (id == 0) {
            d.createGraphics(this);
            image(d.pg, 0, 0);
        }

        else {

            image(d.pg, 0, 0);
            fill(0, 0, 200, 50);
            for(int i = 0; i < 100; i++) {

                ellipse(random(width), random(height), random(10, 50), random(10, 50));
            }

        }

        fill(255, 0, 0);
        text(frameRate, 20, 40);

    }
}
import processing.core.*;
公共类MyProcessingSketch扩展了PApplet{
int-id;
数据d;
公共静态void main(字符串参数[]){
main(新字符串[]{“MyProcessingSketch”,“0”});
main(新字符串[]{“MyProcessingSketch”,“1”});
}
公共void init(){
super.init();
id=parseInt(args[args.length-1]);
PApplet.println(“初始:+id”);
d=Data.getInstance();
延迟(1000);
}
公共作废设置(){
尺寸(800600);
如果(id==0){
d、 创建图形(本);
}
光滑的();
}
公众抽签(){
背景(0,255,0);
如果(id==0){
d、 创建图形(本);
图像(d.pg,0,0);
}
否则{
图像(d.pg,0,0);
填充(0,0,200,50);
对于(int i=0;i<100;i++){
椭圆(随机(宽度)、随机(高度)、随机(10,50)、随机(10,50));
}
}
填充(255,0,0);
文本(帧率,20,40);
}
}
java

import processing.core.PApplet;
import processing.core.PGraphics;

public enum Data {

    INSTANCE;

    PGraphics pg;

    public static Data getInstance() {
        return INSTANCE;
    }


    void createGraphics(PApplet p) {
        if (pg == null) {

            pg = p.createGraphics(p.width, p.height);
            pg.smooth();
        }

        pg.beginDraw();
        pg.background(255, 0, 0);
        pg.line(0, 0, p.width, p.height);
        for(int i = 0; i < 100; i++) {
            pg.ellipse(p.random(p.width), p.random(p.height), p.random(10, 50), p.random(10, 50));
        }
        pg.endDraw();


    }


}
import processing.core.PApplet;
导入处理.core.PGraphics;
公共枚举数据{
实例;
PGraphics-pg;
公共静态数据getInstance(){
返回实例;
}
void createGraphics(PApplet p){
如果(pg==null){
pg=p.createGraphics(p.width,p.height);
pg.光滑();
}
pg.beginDraw();
背景(255,0,0);
pg.线条(0,0,p.宽度,p.高度);
对于(int i=0;i<100;i++){
pg.椭圆(p.随机(p.宽度)、p.随机(p.高度)、p.随机(10,50)、p.随机(10,50));
}
pg.endDraw();
}
}