You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.0 KiB
72 lines
2.0 KiB
package jme3test.app;
|
|
|
|
import com.jme3.app.SimpleApplication;
|
|
import com.jme3.material.Material;
|
|
import com.jme3.math.ColorRGBA;
|
|
import com.jme3.scene.Geometry;
|
|
import com.jme3.scene.shape.Box;
|
|
|
|
/**
|
|
* @author john01dav
|
|
*/
|
|
public class TestEnqueueRunnable extends SimpleApplication{
|
|
private ExampleAsyncTask exampleAsyncTask;
|
|
|
|
public static void main(String[] args){
|
|
new TestEnqueueRunnable().start();
|
|
}
|
|
|
|
@Override
|
|
public void simpleInitApp(){
|
|
Geometry geom = new Geometry("Box", new Box(1, 1, 1));
|
|
Material material = new Material(getAssetManager(), "/Common/MatDefs/Misc/Unshaded.j3md");
|
|
material.setColor("Color", ColorRGBA.Blue); //a color is needed to start with
|
|
geom.setMaterial(material);
|
|
getRootNode().attachChild(geom);
|
|
|
|
exampleAsyncTask = new ExampleAsyncTask(material);
|
|
exampleAsyncTask.getThread().start();
|
|
}
|
|
|
|
@Override
|
|
public void destroy(){
|
|
exampleAsyncTask.endTask();
|
|
super.destroy();
|
|
}
|
|
|
|
private class ExampleAsyncTask implements Runnable{
|
|
private final Thread thread;
|
|
private final Material material;
|
|
private volatile boolean running = true;
|
|
|
|
public ExampleAsyncTask(Material material){
|
|
this.thread = new Thread(this);
|
|
this.material = material;
|
|
}
|
|
|
|
public Thread getThread(){
|
|
return thread;
|
|
}
|
|
|
|
public void run(){
|
|
while(running){
|
|
enqueue(new Runnable(){ //primary usage of this in real applications would use lambda expressions which are unavailable at java 6
|
|
public void run(){
|
|
material.setColor("Color", ColorRGBA.randomColor());
|
|
}
|
|
});
|
|
|
|
try{
|
|
Thread.sleep(1000);
|
|
}catch(InterruptedException e){}
|
|
}
|
|
}
|
|
|
|
public void endTask(){
|
|
running = false;
|
|
thread.interrupt();
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|