Ich versuche, eine Aufgabe automatisch auszuführen (alle 30s).Singleton, kann nicht in der ausführbaren Aufgabe gehen
Dafür baute ich ein Singleton:
public class PortalSingleton {
private static final Logger LOG = LoggerFactory.getLogger(PortalSingleton.class);
private static final int INITIAL_DELAY = 0;
private static final int DELAY = 30;
private static volatile ScheduledExecutorService instance;
private static HomepageView homeView = new HomepageView();
private PortalSingleton() {}
public static final void refreshGridHomePageAutomatically() {
Runnable task =() -> UI.getCurrent().access(() -> {
homeView.refreshGrid();
LOG.info("The grid has been refreshed Automatically");
});
getInstance().scheduleWithFixedDelay(task, INITIAL_DELAY, DELAY, TimeUnit.SECONDS);
}
public final static ScheduledExecutorService getInstance() {
if (instance == null) {
synchronized (ScheduledExecutorService.class) {
if (instance == null) {
instance = Executors.newScheduledThreadPool(1);
}
}
}
return instance;
}
}
Aber ich hatte keine Problem/Fehler und ich habe nicht mein log msg und mein Gitter hat nicht aufgefrischt worden ..
Das Verhalten erwarten:
- mein Raster aktualisieren
- das Protokoll msg sehen
Auch wenn ich die Linie homeView.refreshGrid();
, löschen Ich habe nicht mein Log msg ...
Was habe ich falsch gemacht?
Danke,
EDIT: Ich nenne es, indem Sie: PortalSingleton.refreshGridHomePageAutomatically();
EDIT2 dank @Holger:
public class PortalSingleton {
private static final Logger LOG = LoggerFactory.getLogger(PortalSingleton.class);
private static final int INITIAL_DELAY = 0;
private static final int DELAY = 30;
private static final ScheduledExecutorService instance = Executors.newScheduledThreadPool(1);
private static HomepageView homeView = new HomepageView();
private PortalSingleton() {
}
public static final void refreshGridHomePageAutomatically() {
Runnable task =() -> UI.getCurrent().access(() -> {
homeView.refreshGrid();
LOG.info("The grid has been refreshed Automatically");
});
try {
getInstance().scheduleWithFixedDelay(task, INITIAL_DELAY, DELAY, TimeUnit.SECONDS);
} catch (Exception e) {
LOG.error("error" + e);
}
}
public final static ScheduledExecutorService getInstance() {
return instance;
}
}
nicht beschweren .. Ich erwarte zu sehen msg "Das Gitter wurde automatisch aktualisiert" und meine Gitter aktualisiert, aber ich habe nicht das erwartete Verhalten. Also ich verstehe nicht, was ich falsch gemacht habe, denn ich habe keinen Fehler msg ... – Bob
@Holger, habe ich meinen Beitrag bearbeitet, ist es klarer? – Bob
Danke für Ihre Hilfe! Ich habe versucht, try/catch (siehe EDIT2 in meinem Post) für den ScheduledExecutorService zu verwenden. Ich nahm an, dass das nicht gut ist, weil ich keinen Fehler habe und immer noch nicht das erwartete Verhalten habe. – Bob