|
@@ -0,0 +1,72 @@
|
|
|
+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();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+}
|