static int updateCanvas_retryInterval = 50; // if makeImg returns null, it is recalled after a delay static void updateCanvas(final ImageSurface canvas, fO makeImg) { awt { if (canvas.updating) ret; canvas.updating = true; BufferedImage img = asBufferedImage(callF(makeImg, canvas.getWidth(), canvas.getHeight())); if (img != null) { canvas.setImage(img); canvas.updating = false; } else awtLater(updateCanvas_retryInterval, r { canvas.updating = false; updateCanvas(canvas, makeImg)); }); } }