Swing Nutzen von MediaTracker

tschero

Aktives Mitglied
Hallo Leute,

im unten gezeigten Code möchte ich prüfen, ob ein Image fertig geladen wurde.
Dazu möchte ich den MediaTracker verwenden und verstehen was genau dieser macht.

Java:
private JLabel logoLabel;
private Image image;
private MediaTracker myMediaTracker = new MediaTracker(this);
 
    public Logo_Test(String titel) 
    {
        super(titel);
         
        try 
        {
            image = ImageIO.read(getClass().getResource("../images/iconTest.jpg"));
           
        } 
        catch (IOException ex) 
        {
            Logger.getLogger(Logo_Test.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        myMediaTracker.addImage(image, 1);

        try {
            myMediaTracker.waitForAll();
        } catch (InterruptedException ex) {
            Logger.getLogger(Logo_Test.class.getName()).log(Level.SEVERE, null, ex);
        }

Im oberen Try/Catch wird das Image ja schon geladen und es wird ordentlich Angezeigt.

Ich sehe keine Auswirkung ob der MediaTracker überhaupt arbeitet (er wirft keine Exception) oder nicht.
Macht der MediaTracker hier überhaupt Sinn?

Gruß
tschero
 

L-ectron-X

Gesperrter Benutzer
Wenn du mit [JAPI]ImageIO[/JAPI] arbeitest, brauchst du dir um das Laden der Bilder keine Gedanken mehr machen.
Mit ImageIO verwendet man im Hintergrund keinen [JAPI]MediaTracker[/JAPI] mehr.
D.h.: Den Code ab Zeile 18 abwärts bauchst du nicht mehr.
 
S

SlaterB

Gast
ansonsten, falls dem nicht so wäre (damit mein Posting nicht ganz falsch erscheint ;) )

> und es wird ordentlich Angezeigt.

wo wird das Bild angezeigt? was irgendwo im Restprogramm noch alles passiert ist im Code nicht absehbar
und vor allem dürfte dann doch etwas Zeit vergehen, der Rest des Logo_Test-Konstrukors eben mit dem MediaTracker ausgeführt werden,
warum bist du sicher dass das keine Rolle spielt?

die einzige Feststellung, die du treffen kannst, ist, dass im try/catch schon ein Image-Objekt erstellt wird,
da kann man natürlich vermuten dass dann alles bestens steht,
allerdings ist es in Java so, dass dieses Imaga-Objekt reichlich schlecht funktionieren kann, ist nur eine Hülle, wird noch befüllt/ im Hintergrund geladen, wenn ich es recht in Erinnerung habe

hilfreich als Test ist womöglich, direkt nach dem Laden und später nach dem MediaTracker Höhe und Breite des Images abzufragen und auszugeben
 

André Uhres

Top Contributor
Mit ImageIO#read wird das Bild synchron geladen, darum ist kein Mediatracker nötig. Im Gegensatz dazu ist mit Toolkit#getImage ist ein asynchrones Laden möglich, und der Mediatracker kann dann sicherstellen, dass das Bild ganz geladen ist.

Gruß,
André
 

tschero

Aktives Mitglied
@SlaterB
Hier noch mal der gesamte Code:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logo_test;

import java.awt.Color;
import java.awt.Image;
import java.awt.MediaTracker;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
 
public class Logo_Test extends JFrame 
{ 
    private JLabel logoLabel;
    private Image image;
    
    private MediaTracker myMediaTracker = new MediaTracker(this);
 
    public Logo_Test(String titel) 
    {
        super(titel);
         
        try 
        {
            image = ImageIO.read(getClass().getResource("../images/iconTest.jpg"));
           
        } 
        catch (IOException ex) 
        {
            Logger.getLogger(Logo_Test.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        myMediaTracker.addImage(image, 1);
        try {
            myMediaTracker.waitForAll();
        } catch (InterruptedException ex) {
            Logger.getLogger(Logo_Test.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        ImageIcon icon = new ImageIcon(image);
        
        logoLabel = new JLabel(icon);
//        logoLabel = new JLabel("TestLabel");
        logoLabel.setBounds(100, 100, image.getWidth(this), image.getHeight(this));
//        logoLabel.setBounds(100, 100, 200, 300);
        logoLabel.setBackground(Color.red);
        logoLabel.setOpaque(true);
        logoLabel.setVisible(true);        
        setSize(1024, 768);
        setLocationRelativeTo(null);

//        getContentPane().setLayout(null);
        this.setLayout(null);
        getContentPane().add(logoLabel); 
        logoLabel.setLocation(50, 50);

//        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
    
    public static void main(String[] args) 
    {
        new Logo_Test("Ein Test mit Bild");
    }
}

Vielen Dank an alle.

Gruß
tschero
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Die ganze Pane width nutzen AWT, Swing, JavaFX & SWT 1
H MouseAdapter Klasse nutzen wenn eigene Klasse bereits von anderer erbt AWT, Swing, JavaFX & SWT 13
U Gibt es eine Möglichkeit statt concatenate einen anderen Befehl zu nutzen? AWT, Swing, JavaFX & SWT 9
P Swing jxmapviewer hinzufügen/nutzen funktioniert nicht AWT, Swing, JavaFX & SWT 7
K Javafx Plugin (javafx:jlink) mit moditect Plugin nutzen ... AWT, Swing, JavaFX & SWT 5
F Wie bekomme ich den Wert der ComboBox in eine Variable gespeichert welche ich für meinen ActionListener nutzen kann? AWT, Swing, JavaFX & SWT 3
S JavaFX Teil eines Bildes ausschneiden / als neues Bild nutzen AWT, Swing, JavaFX & SWT 8
B Swing JXMapkit OSM Karten offline Nutzen AWT, Swing, JavaFX & SWT 0
G JavaFX Nutzen von Interface Callback<P,R> AWT, Swing, JavaFX & SWT 2
P Vorteile von Tooltip nutzen (wird über allen anderen Objekten angezeigt) AWT, Swing, JavaFX & SWT 3
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
C html browser in Application nutzen AWT, Swing, JavaFX & SWT 10
J 2 Bereiche im Frame komplett nutzen - Welchen Layoutmanager? AWT, Swing, JavaFX & SWT 3
L TreeViewerColumn - gesamte TreeView-breite nutzen? AWT, Swing, JavaFX & SWT 5
W LayoutManager GridBag richtig nutzen - Komponenten richtig anordnen und automatisch vergrößern AWT, Swing, JavaFX & SWT 5
T SWINGX richtig nutzen AWT, Swing, JavaFX & SWT 7
S JSplitpane in BorderLayout nutzen AWT, Swing, JavaFX & SWT 4
hdi Swing JTable: Fehler beim Nutzen von RowSorter#setRowFilter AWT, Swing, JavaFX & SWT 4
C Kann Konstruktor von eigenem TableModel nicht nutzen AWT, Swing, JavaFX & SWT 2
R Swing alle Frames nutzen das gleiche Model AWT, Swing, JavaFX & SWT 2
D Swing Nutzen von StyleConstants AWT, Swing, JavaFX & SWT 5
J [gelöst] nicht installierte Schrftart nutzen AWT, Swing, JavaFX & SWT 8
R Japaner koennen mein Programm nicht nutzen..? AWT, Swing, JavaFX & SWT 11
A paint()-Methode für Videoexport nutzen AWT, Swing, JavaFX & SWT 2
T JFrame doppelt nutzen? AWT, Swing, JavaFX & SWT 3
D Methode Graphics g klassenübergreifend nutzen. AWT, Swing, JavaFX & SWT 3
T Eigene erweiterte MouseEvents nutzen AWT, Swing, JavaFX & SWT 2
B Polygon mit contains() nutzen AWT, Swing, JavaFX & SWT 4
D JDIC Browser in SWT/JFace Anwendung nutzen AWT, Swing, JavaFX & SWT 2
B Objekt in "actionPerformed" erzeugen und nutzen AWT, Swing, JavaFX & SWT 3
P VK_TAB wie nutzen ? [Tabulator Taste] AWT, Swing, JavaFX & SWT 5
S JFrame und Applets zusammen nutzen AWT, Swing, JavaFX & SWT 5
T Image wird nicht angezeigt?! - MediaTracker/repaint AWT, Swing, JavaFX & SWT 9
E AWT Kleine Hilfestellung bei Bildern in Mediatracker AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben