Hi Leute,
ich könnte mal dringend Hilfe bei einem Problem bezüglich SplashScreen in Java brauchen.
Ich habe eine Anwendung, die aufgrund der durchzuführenden Schritte etwas länger zum Starten braucht. Daher möchte ich einen SplashScreen dazu packen, der mit der Anwendung gestartet wird und solange angeziegt wird, wie im Hintergrund die durchzuführenden Schritte durchlaufen werden.
Jetzt habe ich im Grunde genommen 2 Probleme:
1. Wie kann ich die darzustellenden Informationen über die einzelnen Schritte (z.B. Schritt 1 fertig, Schritt 2 fertig etc.) an meinen SplashScreen weitergeben,. so dass dieser entsprechend aktualisiert wird?
2. Wie kann ich einen realistischen aber flüssigen Verlauf für die ProgressBar des SplashScreens hinkriegen? Bei meinem Programm kann es sein, dass die Schritte unterschiedlich lange brauchen. Bsp: Schritt 1 braucht 20 Sekunden, Schritt 2 2 Sekunden. Wenn ich die Aktualisierung der ProgressBar nach dem ersten Schritt machen, passiert erst mal lange nichts und dann ein riesiger Schritt..
Hier mal meine Sourcen:
Hat vielleicht jemand von Euch nen Tip, wie und wann ich die Werte des SplashScreens aktualisieren kann? Wenn ich es in der startApplikation-Methode mache, bekomme ich immer NullPointer.
Vielen Dank Gruß
shocking
ich könnte mal dringend Hilfe bei einem Problem bezüglich SplashScreen in Java brauchen.
Ich habe eine Anwendung, die aufgrund der durchzuführenden Schritte etwas länger zum Starten braucht. Daher möchte ich einen SplashScreen dazu packen, der mit der Anwendung gestartet wird und solange angeziegt wird, wie im Hintergrund die durchzuführenden Schritte durchlaufen werden.
Jetzt habe ich im Grunde genommen 2 Probleme:
1. Wie kann ich die darzustellenden Informationen über die einzelnen Schritte (z.B. Schritt 1 fertig, Schritt 2 fertig etc.) an meinen SplashScreen weitergeben,. so dass dieser entsprechend aktualisiert wird?
2. Wie kann ich einen realistischen aber flüssigen Verlauf für die ProgressBar des SplashScreens hinkriegen? Bei meinem Programm kann es sein, dass die Schritte unterschiedlich lange brauchen. Bsp: Schritt 1 braucht 20 Sekunden, Schritt 2 2 Sekunden. Wenn ich die Aktualisierung der ProgressBar nach dem ersten Schritt machen, passiert erst mal lange nichts und dann ein riesiger Schritt..
Hier mal meine Sourcen:
Code:
public static void main(String[] args) throws IOException {
Main main = new Main();
service.execute(main);
}
Code:
public class Main extends StartThread {
/**
* Start-Methode der Applikation.
*
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Main main = new Main();
service.execute(main);
}
/**
* {@inheritDoc}
*/
protected void starteApplikation() {
doSchritt_1();
LOG.info("Schritt 1 erledigt..:");
doSchritt_2();
LOG.info("Schritt 2 erledigt..:");
doSchritt_3();
LOG.info("Schritt 3 erledigt..:");
}
}
Code:
public abstract class StartThread extends Thread {
/** Instanz eines ExecutorServices, welcher den ChildThread startet. */
protected static ExecutorService service = Executors.newCachedThreadPool();
/** Instant des Loggers. */
private static final Log LOG = LogFactory.getLog(StartThread.class);
private SplashScreenThread childThread;
private boolean isWorking;
/**
* {@inheritDoc}
*/
@Override
public void run() {
LOG.info("StartThread.run wurde gestartet... ");
synchronized (this) {
isWorking = true;
childThread = new SplashScreenThread(this);
service.execute(childThread);
starteApplikation();
isWorking = false;
}
LOG.info("StartThread.run wurde beendet... ");
}
/**
* Startet die Applikation.
*/
protected abstract void starteApplikation();
public boolean isWorking() {
return this.isWorking;
}
Code:
public class SplashScreenThread implements Runnable {
private StartThread masterThread;
private SplashScreenMain splashScreenMain;
public SplashScreenThread(StartThread masterThread) {
this.masterThread = masterThread;
}
@Override
public void run() {
System.out.println("ChildThread start");
// Hier wird mein JWindow mit den entsprechenden Initialisierungen
// erstellt (also der SplashScreen)
splashScreenMain = new SplashScreenMain();
while (masterThread.isWorking()) {
}
splashScreenMain.dispose();
System.out.println("ChildThread ende");
}
}
Hat vielleicht jemand von Euch nen Tip, wie und wann ich die Werte des SplashScreens aktualisieren kann? Wenn ich es in der startApplikation-Methode mache, bekomme ich immer NullPointer.
Vielen Dank Gruß
shocking