3D Game project in the works.
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.
 
 
SIGDN/JmeTests/src/jme3test/app/TestEnqueueRunnable.java

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();
}
}
}