La aplicación JavaFX que usa Executor se cuelga al salir

Estoy tratando de hacer un clon de AsyncTask de Android para usar en una aplicación JavaFX. Aquí está el código que se me ocurrió:

import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

abstract public class AsyncTask<Param, Result>
{
    private Param param;
    private static Executor executor;

    public AsyncTask()
    {
        if (executor == null)
            executor = Executors.newSingleThreadExecutor();
    }

    protected void onPreExecute()
    {

    }

    protected Result doInBackground(Param param)
    {
        return null;
    }

    protected void onPostExecute(Result result)
    {

    }

    final public void execute(Param param)
    {
        this.param = param;

        onPreExecute();

        Task t = new Task();
        executor.execute(t);
    }

    private class Task implements Runnable
    {
        public void run()
        {
            Result result = doInBackground(param);
            onPostExecute(result);
        }
    }
}

Puedo usar esta clase en mi aplicación JavaFX y funciona bien, excepto por una cosa: cuando cierro la ventana principal, la JVM se bloquea en lugar de salir limpiamente. Tengo que forzar el cierre de la aplicación.

Creo que el problema está relacionado con el ejecutor. Debido a que no emito un apagado (), el Ejecutor se cuelga esperando que se ejecuten más tareas. Como AsyncTask es un contenedor para el Ejecutor de Java, la clase que extiende AsyncTask no tendrá acceso directo al Ejecutor y, por lo tanto, no puede emitir un apagado (). ¿Cómo puedo hacer un cierre ordenado del ejecutor?

Respuesta 1

¿Cómo convierto la siguiente cadena en un objeto persona? Contenido de la cadena: String testString = "John | 23; Ron | 22; Don | 32" Clase de persona: clase pública Persona {nombre de cadena privada; Cadena privada ...

Al crear HTTPURLConnection's desde Android, ¿alguien tiene alguna experiencia sobre cuándo cerrar una conexión o cuándo desconectarse de una conexión? En caso de desconexión siempre se debe utilizar ...

Estoy tratando de hacer el ejemplo HelloWorldImage desde Beginning Java Development with Libgdx pero no consigo que el proyecto lea la imagen. Así es como se ve el directorio del proyecto y la primera clase ...

Al ejecutarse, se inicia el intento de reconocimiento de voz, pero no imprime nada en EditText. A continuación se muestra el código: import android.app.Activity; importar android.content.ActivityNotFoundException; ...