SplashLoader - LadeBild

Status
Nicht offen für weitere Antworten.

thE_29

Top Contributor
So, nachdem schon ein paar mal nach dem SplashScrenn gesucht worden ist und es eigentlich hier eine gute Anleitung dazu gibt, habe ich das ganze etwas gepackt und aus 2 Klassen 1 Klasse gemacht.

Dann habe ich noch ein paar Fehlerabfragen eingebaut und ein Defaultbild gemacht.


Der Code ist eigentlich leicht zu verstehen und wo man ihn ändern kann/muss sag ich gleich nebenbei:


Code:

Code:
import java.awt.Window;
import java.awt.Image;
import java.awt.Frame;
import java.awt.MediaTracker;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.EventQueue;
import java.net.URL;
import java.io.File;
import java.net.MalformedURLException;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;


public class SplashLoader extends Window
{
  private boolean paintCalled = false; //ob paint Methode schon ausgeführt worden ist
  private Image splashImage; //Das Bild


  /***************************************************************************
   * Standardkonstruktor der Defaultklasse
   * @param owner owner
   * @param splashImage image
   *************************************************************************/
  public SplashLoader(Frame owner, Image splashImage)
  {
    super(owner);
    if(splashImage != null) //wenn es nicht null ist
      this.splashImage = splashImage;
    else //wenn es null ist, erstelle dir selbst ein bild
    {
      BufferedImage bfImage = new BufferedImage(100,100,1);
      Graphics g = bfImage.getGraphics(); //holt Graphics
      g.setColor(java.awt.Color.RED); //setzt Farbe auf Rot
      g.drawLine(0,0,100,100); //zeichnet linie von links oben nach rechts unten
      g.drawLine(0,99,99,0); //zeichnet linie von rechts obne nach links unten
      splashImage = bfImage;
      this.splashImage = bfImage; //speichert das Image ab
    }

    // Load the image
    MediaTracker mt = new MediaTracker(this);
    mt.addImage(splashImage,0);
    try {
      mt.waitForID(0);
    } catch(InterruptedException ex)
    {
      ex.printStackTrace();
    }

    //setzt die Größe
    setSize(splashImage.getWidth(this), splashImage.getHeight(this));

    setLocationRelativeTo(null); //zentriert das Bild/Frame

    //MausAdapter hinzugefügt, sodass wenn man auf das Bild klickt das Bild verschwindet
    MouseAdapter disposeOnClick = new MouseAdapter() {
      public void mouseClicked(MouseEvent evt) {
        // Note: To avoid that method splash hangs, we
        // must set paintCalled to true and call notifyAll.
        // This is necessary because the mouse click may
        // occur before the contents of the window
        // has been painted.
        synchronized (SplashLoader.this)
        {
          SplashLoader.this.paintCalled = true;
          SplashLoader.this.notifyAll();
        }
        dispose(); //Frame disablen
      }
    };
    addMouseListener(disposeOnClick); //hängt den Mauslistener dazu
  }
else //wenn es null ist, erstelle dir selbst ein bild
{
BufferedImage bfImage = new BufferedImage(100,100,1);
Hier konstruiere ich das Defaultbild, falls ein falscher Pfad gesetzt wurde oder das Bild nicht existiert!

Weiter mit dem Code

Code:
/**************************************************************************
   * Update Mehtode fürs Zeichnen
   * @param g Graphics
   *************************************************************************/
  public void update(Graphics g) {
    // Note: Since the paint method is going to draw an
    // image that covers the complete area of the component we
    // do not fill the component with its background color
    // here. This avoids flickering.
    g.setColor(getForeground());
    paint(g);
  }

  /**************************************************************************
   * Zeichnet das Fenster/Image
   * @param g Graphics
   *************************************************************************/
  public void paint(Graphics g) {
    g.drawImage(splashImage, 0, 0, this); //zeichnet da Bild auf 0,0 Koordinate
    // Notify method splash that the window
    // has been painted.
    if (! paintCalled)
    {
      paintCalled = true;
      synchronized (this) { notifyAll();
      }
    }
  }

  /**************************************************************************
   * Erzeugt das SplashImage
   * @param splashImage image
   * @return Frame
   *************************************************************************/
  public static Frame splash(Image splashImage)
  {
    Frame f = new Frame();
    SplashLoader w = new SplashLoader(f, splashImage);

    // Show the window.
    w.toFront(); //setzt es nach vorne
    w.show(); //zeigt es an

    // Note: To make sure the user gets a chance to see the
    // splash window we wait until its paint method has been
    // called at least once by the AWT event dispatcher thread.
    if (! EventQueue.isDispatchThread()) {
      synchronized (w) {
        while (! w.paintCalled) {
          try {
            w.wait();
          } catch (InterruptedException e) {}
        }
      }
    }
    return f; //Frame zurückgeben
  }


  /**************************************************************************
   * Main Methode des SplasLoaders
   * @param args Argumente
   *************************************************************************/
  public static void main(String[] args)
  {
    //holt sich das Image und ruft
    Frame splashFrame = null;
    URL imageURL = null;
    try
    {
      imageURL = SplashLoader.class.getResource("splash.gif"); //entweder aus der Klasse laden
      imageURL = new File("C:\\splash.JPG").toURL(); //oder mit direkter Angabe, oder
    }
    catch (MalformedURLException ex)
    {
      ex.printStackTrace();
    }
    //wenn die angegebene Datei nicht existiert oder ImageUrl null ist
    if(!new File(imageURL.getFile()).exists() || imageURL == null)
    {
      try
      {
        splashFrame = splash(null); //Lädt es mit dem DefaultIcon
        throw new FileNotFoundException("Fehler beim Laden von " +
                                        imageURL.getFile() +
                                        " !!\nDefaultbild wird geladen!!");
      }
      catch (FileNotFoundException ex)
      {
        ex.printStackTrace();
      }
    }
    else if (imageURL != null) //wenn es nicht null ist
      splashFrame = splash(Toolkit.getDefaultToolkit().createImage(imageURL));

    // Call the main method of the application using Reflection
    // --------------------------------------------------------
    try {
      //sucht sich die Klasse raus und danach das main und lädt es mit den Argumenten
      Class.forName("MyApp").getMethod("main", new Class[] {String[].class})
          .invoke(null, new Object[] {args});
      //statt MyApp einfach eure alte Hauptklasse reinmachen
    } catch (Exception ex) //hier werden viele Exceptions geworfen
    {
      ex.printStackTrace();
      System.exit(10); //mit ErrCode beenden
    }
    //Nachdem es fertig geladen ist, das LadeBild nicht mehr anzeigen
    // Dispose the splash screen
    // -------------------------
    if (splashFrame != null)
      splashFrame.dispose();
  }
}

Code Ende



try
{
imageURL = SplashLoader.class.getResource("splash.gif"); //entweder aus der Klasse laden
imageURL = new File("/home/splash.JPG").toURL(); //oder mit direkter Angabe, oder
}
catch (MalformedURLException ex)
{
ex.printStackTrace();
}

//wenn die angegebene Datei nicht existiert oder ImageUrl null ist
if(!new File(imageURL.getFile()).exists() || imageURL == null)
{

Hier sind auf ein paar Dinge zu achten (fett gekennzeichnet):
1. der try/catch Block ist nur dann notwendig, wenn man es mit new File("/home/splash.JPG").toURL(); macht

2. die if Abfrage mit dem exists(), funktioniert nur dann, wenn man die Datei mit new File() holt (sonst könnte es zu Fehlern in der relativen Pfadangabe kommen!)
3. Beispiele:

Sagt man das Bild ist eine Datei, dann kommt dieser Code:
Code:
   try
    {
      imageURL = new File("/home/splash.JPG").toURL(); //oder mit direkter Angabe, oder
    }
    catch (MalformedURLException ex)
    {
      ex.printStackTrace();
    }
    //wenn die angegebene Datei nicht existiert oder ImageUrl null ist
    if(!new File(imageURL.getFile()).exists() || imageURL == null)
    { .......

Sagt man aber, dass das Bild aus den Resourcen geladen werden soll, so kommt dies
Code:
imageURL = SplashLoader.class.getResource("splash.gif"); //entweder aus der Klasse laden
    if(imageURL == null)
{ ....


So und nun muss man dem SplashLoader noch sagen, welche Klasse er zu laden hat und dies geschieht hier:

// Call the main method of the application using Reflection
// --------------------------------------------------------
try {
//sucht sich die Klasse raus und danach das main und lädt es mit den Argumenten
Class.forName("MyApp").getMethod("main", new Class[] {String[].class})
.invoke(null, new Object[] {args});
//statt MyApp einfach eure alte Hauptklasse reinmachen

Statt MyApp einfach deine Hauptklasse mit dem "eigentlichen" main reinschreiben.

Falls du Packages hast, dann einfach den Packagenamen.Hauptklasse reinschreiben.
Bsp.:

Code:
    try {
      //sucht sich die Klasse raus und danach das main und lädt es mit den Argumenten
      Class.forName("ServCtrl").getMethod("main", new Class[] {String[].class})
          .invoke(null, new Object[] {args});

Oder mit Packages
Code:
    try {
      //sucht sich die Klasse raus und danach das main und lädt es mit den Argumenten
      Class.forName("at.dstore.LoginProc").getMethod("main", new Class[] {String[].class})
          .invoke(null, new Object[] {args});



So hoffe das keine Fragen offen bleiben und das nirgends Fehler geliefert werden (bei mir funktionierts ;))
 

thE_29

Top Contributor
So, aufgrund von 187´s anliegen, dass das Programm sich erst dann zeigen soll, wenn man draufklickt habe ich 2 neue Varianten gemacht. Einmal wo der Hauptframe statisch ist und einmal wo er nicht statisch ist, aber statt dem main ein Konstruktoraufruf gemacht wird.


Die Anleitungen was die Reflection-Aufrufe betrifft sind vom ersten Bsp zu nehmen

Die erste Variante:

Code:
import java.awt.Window;
import java.awt.Image;
import java.awt.Frame;
import java.awt.MediaTracker;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.EventQueue;
import java.net.URL;
import java.io.File;
import java.net.MalformedURLException;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import at.dstore.bo.FrameHandler;


/******************************************************************************
 * 

ßberschrift: SplashLoader - LadeBild</p>
 * 

Beschreibung: Klasse zeigt das POS1.gif während dem Laden der Hauptklase an</p>
 * 

Copyright: Copyright (c) 2004</p>
 * 

Organisation: java-forum.net FAQ</p>
 * @author Taschek Jörg
 * @version 1.0 Erstversion 8.11.2004
 * @version 1.1 29.11.2004 2 neue Versionen
 *****************************************************************************/
public class SplashLoader extends Window
{
  private boolean paintCalled = false; //ob paint Methode schon ausgeführt worden ist
  private Image splashImage; //Das Bild
  private static boolean bLoaded = false; //ob er schon fertig geladen hat


  /***************************************************************************
   * Standardkonstruktor der Defaultklasse
   * @param owner owner
   * @param splashImage image
   *************************************************************************/
  public SplashLoader(Frame owner, Image splashImage)
  {
    super(owner);
    if(splashImage != null) //wenn es nicht null ist
      this.splashImage = splashImage;
    else //wenn es null ist, erstelle dir selbst ein bild
    {
      BufferedImage bfImage = new BufferedImage(100,100,1);
      Graphics g = bfImage.getGraphics(); //holt Graphics
      g.setColor(java.awt.Color.RED); //setzt Farbe auf Rot
      g.drawLine(0,0,100,100); //zeichnet linie von links oben nach rechts unten
      g.drawLine(0,99,99,0); //zeichnet linie von rechts obne nach links unten
      splashImage = bfImage;
      this.splashImage = bfImage; //speichert das Image ab
    }

    // Load the image
    MediaTracker mt = new MediaTracker(this);
    mt.addImage(splashImage,0);
    try {
      mt.waitForID(0);
    } catch(InterruptedException ex)
    {
      ex.printStackTrace();
    }

    //setzt die Größe
    setSize(splashImage.getWidth(this), splashImage.getHeight(this));

    setLocationRelativeTo(null); //zentriert das Bild/Frame

    //MausAdapter hinzugefügt, sodass wenn man auf das Bild klickt das Bild verschwindet
    MouseAdapter disposeOnClick = new MouseAdapter() {
      public void mouseClicked(MouseEvent evt) {
        // Note: To avoid that method splash hangs, we
        // must set paintCalled to true and call notifyAll.
        // This is necessary because the mouse click may
        // occur before the contents of the window
        // has been painted.
        synchronized (SplashLoader.this)
        {
          SplashLoader.this.paintCalled = true;
          SplashLoader.this.notifyAll();
        }
        showStaticFrame(); //wenn man draufklickt soll der andere Frame angezeigt werden
        dispose(); //Frame disablen
      }
    };
    addMouseListener(disposeOnClick); //hängt den Mauslistener dazu
  }

  /**************************************************************************
   * Update Mehtode fürs Zeichnen
   * @param g Graphics
   *************************************************************************/
  public void update(Graphics g) {
    // Note: Since the paint method is going to draw an
    // image that covers the complete area of the component we
    // do not fill the component with its background color
    // here. This avoids flickering.
    g.setColor(getForeground());
    paint(g);
  }

  /**************************************************************************
   * Zeichnet das Fenster/Image
   * @param g Graphics
   *************************************************************************/
  public void paint(Graphics g) {
    g.drawImage(splashImage, 0, 0, this); //zeichnet da Bild auf 0,0 Koordinate
    // Notify method splash that the window
    // has been painted.
    if (! paintCalled)
    {
      paintCalled = true;
      synchronized (this) { notifyAll();
      }
    }
  }

  /**************************************************************************
   * Erzeugt das SplashImage
   * @param splashImage image
   * @return Frame
   *************************************************************************/
  public static Frame splash(Image splashImage)
  {
    Frame f = new Frame();
    SplashLoader w = new SplashLoader(f, splashImage);

    // Show the window.
    w.toFront(); //setzt es nach vorne
    w.show(); //zeigt es an

    // Note: To make sure the user gets a chance to see the
    // splash window we wait until its paint method has been
    // called at least once by the AWT event dispatcher thread.
    if (! EventQueue.isDispatchThread()) {
      synchronized (w) {
        while (! w.paintCalled) {
          try {
            w.wait();
          } catch (InterruptedException e) {}
        }
      }
    }
    return f; //Frame zurückgeben
  }


  /**************************************************************************
   * Main Methode des SplasLoaders
   * @param args Argumente
   *************************************************************************/
  public static void main(String[] args)
  {
    //holt sich das Image und ruft
    Frame splashFrame = null;
    URL imageURL = null;
    imageURL = SplashLoader.class.getClassLoader().getResource("images/POS1.gif");
    //wenn die angegebene Datei nicht existiert oder ImageUrl null ist
    if(imageURL == null)
    {
      try
      {
        splashFrame = splash(null); //Lädt es mit dem DefaultIcon
        throw new FileNotFoundException("Fehler beim Laden des Bildes!!!\nDefaultbild wird geladen!!");
      }
      catch (FileNotFoundException ex)
      {
        ex.printStackTrace();
      }
    }
    else if (imageURL != null) //wenn es nicht null ist
      splashFrame = splash(Toolkit.getDefaultToolkit().createImage(imageURL));

    // Call the main method of the application using Reflection
    // --------------------------------------------------------
    try {
      //sucht sich die Klasse raus und danach das main und lädt es mit den Argumenten
      Class.forName("MyApp").getMethod("main", new Class[] {String[].class})
          .invoke(null, new Object[] {args});
      //statt MyApp einfach eure alte Hauptklasse reinmachen
      bLoaded = true; //damit er weiß das er fertig geladen hat
    } catch (Exception ex) //hier werden viele Exceptions geworfen
    {
      ex.printStackTrace();
      System.exit(10); //mit ErrCode beenden
    }
    //Nachdem es fertig geladen ist, das LadeBild nicht mehr anzeigen
    // Dispose the splash screen
    // -------------------------
//    if (splashFrame != null)  // das automatische Verschwinden setzen wird auskommentiert,
//      splashFrame.dispose();  // da der Frame erst angezeigt werden soll wenn man draufklickt und solange soll das Bild zu sehen sein
  }

  /***************************************************************************
   * Funktion lässt den Frame dann anzeigen
   **************************************************************************/
  private void showStaticFrame()
  {
    if(bLoaded)
      try{
        Class.forName("MyApp").getMethod("showStaticFrame", null).
            invoke(null, null); //hier wird die Funktion aufgerufen, die als public static definiert sein muss!
      }
      catch(Exception ex)
      {
        ex.printStackTrace();
      }
    else //wenn es noch nicht geladen wurde, aber schon jemand auf das Bild klickt
      new java.util.Timer().schedule(new java.util.TimerTask(){
        public void run()
        {
          showStaticFrame(); //ruft die Funktion nach 200ms wieder auf, solange bis es geladen wurde
        }},200);
  }
}


Und hier die Variante wo der frame nicht statisch und die Funktion natürlich auch nicht statisch ist

Code:
package at.dstore;

import java.awt.Window;
import java.awt.Image;
import java.awt.Frame;
import java.awt.MediaTracker;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.EventQueue;
import java.net.URL;
import java.io.File;
import java.net.MalformedURLException;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.FileNotFoundException;
import at.dstore.bo.FrameHandler;


/******************************************************************************
 * 

ßberschrift: SplashLoader - LadeBild</p>
 * 

Beschreibung: Klasse zeigt das POS1.gif während dem Laden der Hauptklase an</p>
 * 

Copyright: Copyright (c) 2004</p>
 * 

Organisation: java-forum.net FAQ</p>
 * @author Taschek Jörg
 * @version 1.0 Erstversion 8.11.2004
 * @version 1.1 29.11.2004 2 neue Versionen
 *****************************************************************************/
public class SplashLoader extends Window
{
  private boolean paintCalled = false; //ob paint Methode schon ausgeführt worden ist
  private Image splashImage; //Das Bild
  private static Object objInstance = null;
  private static boolean bLoaded = false; //ob er schon fertig geladen hat


  /***************************************************************************
   * Standardkonstruktor der Defaultklasse
   * @param owner owner
   * @param splashImage image
   *************************************************************************/
  public SplashLoader(Frame owner, Image splashImage)
  {
    super(owner);
    if(splashImage != null) //wenn es nicht null ist
      this.splashImage = splashImage;
    else //wenn es null ist, erstelle dir selbst ein bild
    {
      BufferedImage bfImage = new BufferedImage(100,100,1);
      Graphics g = bfImage.getGraphics(); //holt Graphics
      g.setColor(java.awt.Color.RED); //setzt Farbe auf Rot
      g.drawLine(0,0,100,100); //zeichnet linie von links oben nach rechts unten
      g.drawLine(0,99,99,0); //zeichnet linie von rechts obne nach links unten
      splashImage = bfImage;
      this.splashImage = bfImage; //speichert das Image ab
    }

    // Load the image
    MediaTracker mt = new MediaTracker(this);
    mt.addImage(splashImage,0);
    try {
      mt.waitForID(0);
    } catch(InterruptedException ex)
    {
      ex.printStackTrace();
    }

    //setzt die Größe
    setSize(splashImage.getWidth(this), splashImage.getHeight(this));

    setLocationRelativeTo(null); //zentriert das Bild/Frame

    //MausAdapter hinzugefügt, sodass wenn man auf das Bild klickt das Bild verschwindet
    MouseAdapter disposeOnClick = new MouseAdapter() {
      public void mouseClicked(MouseEvent evt) {
        // Note: To avoid that method splash hangs, we
        // must set paintCalled to true and call notifyAll.
        // This is necessary because the mouse click may
        // occur before the contents of the window
        // has been painted.
        synchronized (SplashLoader.this)
        {
          SplashLoader.this.paintCalled = true;
          SplashLoader.this.notifyAll();
        }
        showNonStaticFrame();
        dispose(); //Frame disablen
      }
    };
    addMouseListener(disposeOnClick); //hängt den Mauslistener dazu
  }

  /**************************************************************************
   * Update Mehtode fürs Zeichnen
   * @param g Graphics
   *************************************************************************/
  public void update(Graphics g) {
    // Note: Since the paint method is going to draw an
    // image that covers the complete area of the component we
    // do not fill the component with its background color
    // here. This avoids flickering.
    g.setColor(getForeground());
    paint(g);
  }

  /**************************************************************************
   * Zeichnet das Fenster/Image
   * @param g Graphics
   *************************************************************************/
  public void paint(Graphics g) {
    g.drawImage(splashImage, 0, 0, this); //zeichnet da Bild auf 0,0 Koordinate
    // Notify method splash that the window
    // has been painted.
    if (! paintCalled)
    {
      paintCalled = true;
      synchronized (this) { notifyAll();
      }
    }
  }

  /**************************************************************************
   * Erzeugt das SplashImage
   * @param splashImage image
   * @return Frame
   *************************************************************************/
  public static Frame splash(Image splashImage)
  {
    Frame f = new Frame();
    SplashLoader w = new SplashLoader(f, splashImage);

    // Show the window.
    w.toFront(); //setzt es nach vorne
    w.show(); //zeigt es an

    // Note: To make sure the user gets a chance to see the
    // splash window we wait until its paint method has been
    // called at least once by the AWT event dispatcher thread.
    if (! EventQueue.isDispatchThread()) {
      synchronized (w) {
        while (! w.paintCalled) {
          try {
            w.wait();
          } catch (InterruptedException e) {}
        }
      }
    }
    return f; //Frame zurückgeben
  }


  /**************************************************************************
   * Main Methode des SplasLoaders
   * @param args Argumente
   *************************************************************************/
  public static void main(String[] args)
  {
    //holt sich das Image und ruft
    Frame splashFrame = null;
    URL imageURL = null;
    imageURL = SplashLoader.class.getClassLoader().getResource("images/POS1.gif");
    //wenn die angegebene Datei nicht existiert oder ImageUrl null ist
    if(imageURL == null)
    {
      try
      {
        splashFrame = splash(null); //Lädt es mit dem DefaultIcon
        throw new FileNotFoundException("Fehler beim Laden des Bildes!!!\nDefaultbild wird geladen!!");
      }
      catch (FileNotFoundException ex)
      {
        ex.printStackTrace();
      }
    }
    else if (imageURL != null) //wenn es nicht null ist
      splashFrame = splash(Toolkit.getDefaultToolkit().createImage(imageURL));

    // Call the main method of the application using Reflection
    // --------------------------------------------------------
    try {
      //sucht sich den Konstruktor raus und speichert die Instanz drauf
      //statt MyApp einfach eure alte Hauptklasse reinmachen
      objInstance = Class.forName("MyApp").getConstructor(new
          Class[]
          {String[].class}).newInstance(new Object[]{args});
      //Konstruktor wird mit den Parametern aufgerufen und sieht so aus public Konstruktor(String[] args)
      bLoaded = true; //setzt die Variable auf true, damit man weiß das der Konstruktor fertig ist

    } catch (Exception ex) //hier werden viele Exceptions geworfen
    {
      ex.printStackTrace();
      System.exit(10); //mit ErrCode beenden
    }
    //Nachdem es fertig geladen ist, das LadeBild nicht mehr anzeigen
    // Dispose the splash screen
    // -------------------------
//    if (splashFrame != null)  // das automatische Verschwinden setzen wird auskommentiert,
//      splashFrame.dispose();  // da der Frame erst angezeigt werden soll wenn man draufklickt und solange soll das Bild zu sehen sein
  }

  /***************************************************************************
   * Funktion lässt den Frame dann anzeigen
   **************************************************************************/
  private void showNonStaticFrame()
  {
    if(bLoaded)
      try
      {
        Class.forName("MyApp").getMethod("showNonStaticFrame", null).
            invoke(objInstance, null); //hier wird die Funktion aufgerufen, die als public definiert sein muss!
      }
      catch (Exception ex)
      {
        ex.printStackTrace();
      }
    else //wenn es noch nicht geladen wurde, aber schon jemand auf das Bild klickt
      new java.util.Timer().schedule(new java.util.TimerTask(){
        public void run()
        {
          showNonStaticFrame(); //ruft die Funktion nach 200ms wieder auf, solange bis es geladen wurde
        }},200);
  }
}


Nachtrag: Man könnte noch einen Counter in die Funktionen showNon/StaticFrame einbauen, wenn der Timer 20 mal durchläuft das er dann ne Fehlermeldung oder was bringt (falls was schief geht beim Laden -> da die boolsche Variable im try Block auf true gesetzt wird und bei nem Fehler (Exception) wird sie nicht auf true gesetzt).
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben