X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FScheduler.java;fp=src%2Forg%2Fxwt%2FScheduler.java;h=8a5cd3226d9f5d286abf80d23580d78e1276be69;hb=2ccad2219888c9942f62ae8b4d4207f655690948;hp=1f57fe7c9c8976240c1874be5ddb07bad7c22cdb;hpb=c191f0122fbd24c2df21c41affb0c039d59f16d8;p=org.ibex.core.git diff --git a/src/org/xwt/Scheduler.java b/src/org/xwt/Scheduler.java index 1f57fe7..8a5cd32 100644 --- a/src/org/xwt/Scheduler.java +++ b/src/org/xwt/Scheduler.java @@ -11,20 +11,17 @@ public class Scheduler { // Public API Exposed to org.xwt ///////////////////////////////////////////////// private static Scheduler singleton; - public static abstract class Task { public abstract void perform() throws Exception; } + public static interface Task { public abstract void perform() throws Exception; } public static void add(Task t) { singleton.runnable.append(t); } - public static void init() { - if (singleton != null) return; - singleton = Platform.getScheduler(); - singleton.run(); - } - + public static void init() { if (singleton == null) (singleton = Platform.getScheduler()).run(); } // API which must be supported by subclasses ///////////////////////////////////// /** - * INVARIANT: all scheduler implementations MUST invoke Surface.renderAll() after performing a Task if no tasks remain - * in the queue. A scheduler may choose to invoke Surface.renderAll() more often than that if it so chooses. + * SCHEDULER INVARIANT: all scheduler implementations MUST invoke + * Surface.renderAll() after performing a Task if no tasks remain + * in the queue. A scheduler may choose to invoke + * Surface.renderAll() more often than that if it so chooses. */ public void run() { defaultRun(); } protected Scheduler() { } @@ -39,12 +36,15 @@ public class Scheduler { try { t.perform(); // FEATURE: be smarter about this - Surface.renderAll(); + if (t != Surface.renderAll) add(Surface.renderAll); } catch (JSExn e) { + Log.log(Scheduler.class, "a JavaScript thread spawned with xwt.thread() threw an exception:"); Log.log(Scheduler.class, e.toString()); } catch (Exception e) { + Log.log(Scheduler.class, "a Task threw an exception which was caught by the scheduler:"); Log.log(Scheduler.class, e); } + // if an Error is thrown it will cause the engine to quit } } }