Udo Springfeld: Mediatracker

Sehr geehrter Leser,

trotz umfangreicher Recherchen on- wie offline bin ich zu dem Schluss gelangt, das es keine empfohlene Variante gibt in Java mittels des sogenannten Mediatracker auf ein oder mehrere image-Objekt(e) warten zu lassen:

Alle Anweisungen in den try-Block zu packen ist eine Möglichkeit, nehmen wir ein wenig Beispielcode:

try {
einBeispielMediatracker = new Mediatracker(this);
einBeispielMediatracker.addImage(dateiname.gif, ID);
nocheinBeispielMediatracker.waitForID(ID);
} catch (InterruptedException e) {
    return;
}

In anderen Beispielen hingegen wird zunächst ein Mediatracker-Objekt erstellt

nocheinBeispielMediatracker = new Mediatracker(this);

um dann Objekte (respektive Bilder) hinzuzufügen

nocheinBeispielMediatracker.addImage(dateiname.gif, ID)

und dann wie hier

public void run() {
  try {
   nocheinBeispielMediatracker.waitForID(ID);
  } catch (InterruptedException e) {
    return;
  }
}

in einem try-Block versucht auf die Elemente zu warten.

Welches der beiden vorangestellten Anreihungen von Code würden Sie empfehlen, wie kann man hier eine Entscheidung treffen.

Vielen Dank für Ihre Mühen,

Udo Springfeld

  1. Hallo Udo,

    grundsätzlich machen beide Beispiele dasgleiche.
    Aber aus welchem Grund sollte man überhaupt Anweisungen, die keine Ausnahme auswerfen, in eine try-catch-Anweisung packen?
    Außer um zu zeigen, daß die Anweisumgen zusammengehören, spricht doch eigentlich nichts dafür.
    Aber ich bin mir sicher, daß es für die Laufzeit überhaupt keinen Unterschied macht, wenn überhaupt dann zur Compilierzeit.

    Ich persönlich würde mich für die zweite Variante entscheiden, damit man den Überblick behält, welche nweisung hier eigentlich die Exception auswirft.

    Gruß

    Beate Mielke

    1. Hallo Beate,

      vielen Dank für Ihr Statement,
      weiterhin stellt sich mir die Frage wie lange der try/catch-Block das Programm 'anhält' wenn die Bilddatei zu langsam geladen wird, es gibt ein weiteres Exemplar der Methode in der man die genaue Milisekundenzahl definieren kann die das 'waitForID' warten soll, ohne dies aber kann man hier wohl eine Endlosmethode generieren, wenn das Bild gross genug ist.

      Mit besten Grüssen

      Udo Springfeld

      1. Hallo Udo,

        (ich bleibe mal beim Du, weil das hier so üblich ist)

        weiterhin stellt sich mir die Frage wie lange der try/catch-Block das Programm 'anhält' wenn die Bilddatei zu langsam geladen wird, es gibt ein weiteres Exemplar der Methode in der man die genaue Milisekundenzahl definieren kann die das 'waitForID' warten soll, ohne dies aber kann man hier wohl eine Endlosmethode generieren, wenn das Bild gross genug ist.

        wenn Du möchtest, daß der restliche Teil des Programms weiterarbeitet, während die Bilder geladen werden, mußt Du einen Thread verwenden.
        Normalerweise läuft das Programm selbst in einem Thread (vergleichbar mit einem Prozess unter Unix).
        Mit dem selbst angelegten zweiten Thread können die Bilder dann in Ruhe vor sich hinladen, während der Rest weiterarbeitet.
        Das Thema Threads ist aber nicht ganz so einfach, erwarte jetzt bitte keinen Vortrag von mir darüber, das müßtest Du Dir dann schon in einem Buch oder so anschauen.

        Du kannst also Deine waitForID-Methode ruhig weiterhin anwenden, sie halt nur in einen Thread packen, aber schaden kann es trotzdem nicht, wenn Du die Methode mit den Millisekunden benutzt, weil es ja immer mal vorkommen kann, daß ein Bild nicht geladen werden kann.

        Ich hoffe, das hilft ein wenig weiter.

        Gruß

        Beate Mielke