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