Serviço de agendamento em java usando WinRun4J

Boa tarde

Estou fazendo um serviço do windows usando o WinRun4J, esta funcionando bem, porém em certa parte do código peço para criar uma agendamento usando o Timer.schedule

public void tarefa(int hora, int minuto){
    Timer timer = new Timer();
    Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, hora);
        calendar.set(Calendar.MINUTE, minuto);
        calendar.set(Calendar.SECOND, 0);
                    
    timer.schedule(new TimerTask(){
        
        @Override
        public void run() {
            
            Platform.runLater(() -> {
                try {
                    EventLog.report("Tarefa executada", EventLog.INFORMATION, execCommand(commandLine()));
                } catch (IOException e) {
                    log("Falha ao rodar a tarefa"+e.getMessage());
                }
            });
        }
    }, calendar.getTime(), 1000*60*60*24);//roda a cada um dia
}

Como podem ver eu adicionei um Platform.runLater() quando passa por ele é gravado um erro no log.

Exception in thread “Timer-1” java.lang.IllegalStateException: Toolkit not initialized
at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
at com.sun.javafx.application.PlatformImpl.runLater(Unknown Source)
at javafx.application.Platform.runLater(Unknown Source)
at meuservicoteste.MeuServicoTeste$1.run(MeuServicoTeste.java:86)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)

A ideia era que quando ele passe pelo código, só rode no horário programado, caso esteja sem o Platform.runLater() ele passa pelo código e roda a tarefa no mesmo momento.

Alguma ideia que possa usar sem precisar de outros componentes? como o Quartz por exemplo.

1 curtida