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.