Preloader mit Haupt-Applikation verbinden

Hallo,
ich bin noch ein Anfänger… und habe ein Problem mit dem Binden des Preloaders mit der Hauptapplikation.
ich habe den Preloader unter anderem mit folgenden Methoden: start() und handleProgressNotification() und handleStateChangeNotification()
Nur, jetzt weiß ich nicht, wo ich diese Methoden aufrufen soll. Wie verknüpfe ich den Preloader mit meiner Hauptapplikation?

Ich hoffe ihr könnt mir helfen.
Vielen Dank.

wie kommst du denn auf die Idee, dass es überhaupt einen Preloader gibt, dass der nützlich ist, wie kommst du auf die genannten Methoden und deren Sinn?
-> normalerweise ist doch all sowas sinnvoll über ein Tutorial gelernt, ist da kein Beispiel dazu da?

einfache Suche liefert auch manches, die Anbindungswege in


und
Deploying JavaFX Applications: Preloaders | JavaFX 2 Tutorials and Documentation
klingen allerdings durchaus schon etwas unterschiedlich (main-Methode in Launcher vs. XML Deployment Descriptor), also gewiss nicht ganz simpel,
hängt vielleicht auch davon ab was für eine Anwendung du hast,

inzwischen irgendwas klarer geworden oder weiter komplett Bahnhof?

wie komm ich darauf ? fast jede anwendung, die man startet, hat einen preloader :smiley: auf die methoden bin ich mithilfe von google gekommen. deren Sinn versteh ich langsam, aber immer noch nicht ganz leider.

mein problem ist, ich weiß nicht, wo ich diese methoden aufrufen soll.
ich weiß mittlerweile, dass ich in der Hauptapplikation diese drei zustände setzten muss: BEFORE_LOAD, BEFORE_INIT, BEFORE_START. ich hoffe das stimmt, was ich da glaube.
aber ich weiß nicht wo ich diese drei zustände setzten soll.
hab auch codebeispiel gegoogelt. da werden diese methoden gar nicht aufgerufen, die im preloader stehen. verwirrt mich ein wenig :confused:


sieht mir immer passender aus, von den drei Zuständen ist auch die Rede,

die Methoden werden nicht direkt aufgerufen so wie auch paint von JPanel & Co. nicht, oder run() von Thread, falls dir die Beispiele was sagen,
da ist nix dabei, passiert im Hintergrund,

im Link ist ein Beispiel-Preloader und ein Launch-Aufruf, kommt das für dich in Frage, funktioniert es grob,
-> alles geklärt oder an welcher Stelle Probleme?

ja genau.
wichtig ist dieser Aufruf :
LauncherImpl.launchApplication(MyApplication.class, MyPreloader.class, args);
damit wird zuerst der Preloader aufgerufen, und dann passiert das ganze mit dem Laden und die Application startet. Vielen dank dir.
denn mit launch() alleine beginnt schon und nur die hauptApplikation.
danke dir. ich hatte die ganzen links schon selber gefunden. nur war das nicht gleich offensichtlich für mich.

ich hoffe ich habs jetzt geschafft… ich sag bescheid wenn alles funktioniert. Dankeschön

schade. ich sehe zwar den preloader. aber er verschwindet wieder recht schnell.
die Hauptapplikation wird offensichtlich geladen also load() wird aufgeruden. dann intialisiert also init() wird aufgerufen , und wird auch gestartet also start() wird aufgerufen. (ich hoffe, das stimmt überhaupt was ich schreibe ? denn eigentlich sollte der preloader ja bis zum starten da bleiben. aber ich denke schon, dass das stimmt, was ich schreibe. ich hab genau diese handleStateChangeNotification Methode aus dem BeispielCode verwendet, die die drei BEFORE_typen auf der kondole ausgibt. das heißt alle drei zustände werden durchgeführt. aber wieder verschwindet der preloader und die hauptApplikation lädt dann weiter ? ) dann verschwindet der preloader und die hauptApplikation lädt weiter :confused:

es kommt mir vor, dass wenn der preloader weg ist, dass erst dann die ganzen methoden der hauptApplikation aufgerufen. also init() und start() und was es alles gibt.
das heißt der preloader ist noch gar nicht richtig eingebunden… würd ich mal sagen.

ich glaub, irgendwas vergess ich noch die ganze zeit :confused:
ich mach das ganze folgendermaßen:

class Hauptapplikation extends Application{
main(){
		LauncherImpl.launchApplication(Main.class, myPreloader.class, args);
}



class myPreloader extends Prelader{
start(){
// Stage wird erzeugt....
}

@Override
	public void handleProgressNotification(ProgressNotification pn)
	{
		bar.setProgress(pn.getProgress());
	}

@Override
	public void handleStateChangeNotification(StateChangeNotification info)
	{
		// if (info.getType() == StateChangeNotification.Type.BEFORE_START)
		// {
		// stage.hide();
		// }

		StateChangeNotification.Type type = info.getType();
		switch (type)
		{
		case BEFORE_LOAD:
			// Called after MyPreloader#start is called.
			System.out.println("BEFORE_LOAD");
			break;
		case BEFORE_INIT:
			// Called before MyApplication#init is called.
			System.out.println("BEFORE_INIT");
			break;
		case BEFORE_START:
			// Called after MyApplication#init and before MyApplication#start is
			// called.
			System.out.println("BEFORE_START");

			stage.hide();
			break;
		}
	}

wie sieht denn deine Application dazu aus?
hast du dort init()-Methode?
setze dort eine System.out.println-Ausgabe an Anfang und Ende, evtl. mit Zeitausgabe falls du das schaffst,

wie kommen da die Ausgaben im Vergleich zu
System.out.println(„BEFORE_INIT“); im Preloader?

falls falsche Reihenfolge, dann vielleicht zu klären,
falls genau richtig
… BEFORE_INIT
… Start der init()-Methode von Application.

… Ende der init()-Methode von Application.
… BEFORE_START
dann ja alles bestens

dann ist die Frage ob du diese Mittel auch richtig einsetzt, läuft deine init()-Methode der Application mehrere Sekunden
und die start()-Methode der Application (wo bewußt Preloader schon beendet) dann recht schnell zur Anzeige?

und ist der Preloader während der sekundenlangen init() auch die ganze Zeit zu sehen?

da muss man nun sehr genau aufpassen was alles passiert, vielleicht hilft vollständiger Code von dir damit andere es testen können,
sonst musst du schon exakt dokumentieren, wann welche Methode wie lange drankommt und was währenddessen ungefähr angezeigt wird


mit

sprichst du schon die wichtigen Sachen an,
ob dein Eindruck stimmt kannst du zum Teil mit den Ausgaben oben etwas sicherer nachprüfen,
die Anzeige nebenher muss mehr von dir genau bestätigt werden (wie ca. 10x gesagt nun)

danke. also ich hab jetzt Systemausgaben erzeugt: in folgender reihenfolge kommen die ausgaben:

  1. BEFORE_LOAD
  2. BEFORE_INIT
  3. aus der init() MethodeThu Feb 11 22:28:44 CET 2016 init Methode der Application. (die init() Methode ist leer, da wird nix gemacht.)
  4. BEFORE_START

entweder hier oder schon nach Schritt 3 schließt sich der Preloader. schritt 3 und schritt 4 passieren so schnell, dass man nicht erkennt, ob der preloader schon nach schritt 3 beendet wird, oder erst nach schritt 4.

5.dann werden die ganzen bilder geladen… und alles andere was dazu gehört…
6. und dann kommt meine systemausgabe aus der start() Methode: Thu Feb 11 22:28:54 CET 2016: start methode…

ich vermute, dass der preloader sich nach dem init() schließt und nach start () dauerts ewig, bis die Hauptapplikation mit der ersten View startet, aber da ist der preloader schon längst weg.

das soll ja auch egal sein, am Ende von init() kommt sogleich das Event BEFORE_START und Preloader verabschiedet sich,
all diese direkt aufeinander folgenden Schritte darf man als einen Zeitpunkt betrachten

das ist nun das Problem, dafür ist init() da, dort sollen Bilder geladen werden,

wenn du Code dazu explizit in start() der Application hast kann man das evtl. verschieben,
wenn es um Hintergrundarbeit von XML-Konfigurationen gesteuert geht dann vielleicht nicht ganz so leicht,

mehr Code, XML, Infos mögen evtl. helfen

hab das laden der bilder in init verschoben. hatte bis jetzt eigentlich gar keine richtige init() methode.
jetzt gehts. preloader bleibt da, bis start aufgerufen wird . vielen dank für das dabeisein und mitdenken und für die geistige und seelische unterstützung.
…jetzt ist aber der progressBar schon die ganze zeit schon voll . muss das noch fixen… aber das grundlegende ist geschafft.
ich würde sagen, das Problem ist gelöst :slight_smile:

ohjemine. ich schaff es nicht, dass der progressBar wirklich geladen wird. sondern es springt am anfang gleich von 0 auf 1. dann ist der balken voll. und ich warte immer noch ein paar sekunden, bis erst die HauptApplikation startet.
die handleApplicationNotification( ) soll anscheinend Abhilfe schaffen. aber bei mir funktioniert sie nicht :confused:

in der handleProgressNotification( ) Methode lass ich mit System.out.println("Progress " + bar.getProgress()); den Progress ausprinten. bekomme Progress 0.0 und gleich danach Progress 1.0

was offenbar kaum was mit dem vorherigen zu tun hat/ nicht per Glaskugel beantwortet werden kann,
wenn du eine Frage zu Progressbar hast, dann poste doch deinen Code und geplanten Ablauf, Dauer bestimmter Aktionen, dazu,

suche idealerweise auch selber in Suchmaschinen nach geeigneten Beispielen dazu und vergleiche

man muss einfach mit notifyPreloader( ) in der Main extends Application an verschiedenen Stellen (vor dem Laden der Bilder ; nach dem Laden der Bilder; etc… ) aufrufen und dem jeweils einen Double-Wert eingeben.
Voraussetzung ist aber, dass man im preloader noch die Methode handleApplicationNotification( ) geschrieben hat, damit notifypreloader() erkannt wird.
die Double -werte erkennt man dann daran, dass sich der progressBar im Preloader füllt.

bayern wird meister