public void writeImage() { RenderImageTask renderImage = new RenderImageTask(nanColour, imageFriendlyData, hdu, height, width, histogram); ChangeListener<Number> IMAGE_CREATED_LISTENER = new ChangeListener<Number>() { @Override public void changed( ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { if (renderImage.getWorkDone() == 1) { image = renderImage.getImage(); renderImage.workDoneProperty().removeListener(this); controller.adjustViewForImage(); controller.reloadVisibleAnnotationsAndSelections(); } } }; renderImage.workDoneProperty().addListener(IMAGE_CREATED_LISTENER); ExecutorService es = controller.createExecutor("RenderImageExecutor"); es.submit(renderImage); }