*.gif anzeigen

Status
Nicht offen für weitere Antworten.

e9926044

Bekanntes Mitglied
Hallo,

ich möchte nur ein einfaches *.gif anzeigen, so wie es sehr oft zu finden ist aber leider funktionierts bei bir nicht.
Hat da wer eine Erklärung. Der Frame wird entweder ohne Bild dargestellt oder es erscheint nur der Rahmen und das Progrmm hängt sich auf. Vielleicht kanns ja mal wer mit dem unteren Code ausprobieren.

Vielen DANK für EURE Hilfe!!

lg Hannes

Code:
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;
import java.io.*;
import javax.imageio.*;
import java.awt.image.BufferedImage;


public class VNCClientGUI extends javax.swing.JFrame {
    public Image img;
    
    public VNCClientGUI() {
	super("Client Programm");
	setVisible(true);
	repaint();
        initComponents();
        }
        
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">                          
    private void initComponents() {
        oeffnenButton = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenu2 = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setAlwaysOnTop(true);
        setBounds(new java.awt.Rectangle(0, 0, 0, 0));
        setForeground(java.awt.Color.white);
        setMaximizedBounds(new java.awt.Rectangle(0, 0, 0, 0));
        setResizable(false);
        oeffnenButton.setText("\u00d6ffnen");

        jMenu1.setText("Datei");
        jMenuItem1.setText("Schlie\u00dfen");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });

        jMenu1.add(jMenuItem1);

        jMenuBar1.add(jMenu1);

        jMenu2.setText("Bearbeiten");
        jMenuBar1.add(jMenu2);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(457, Short.MAX_VALUE)
                .addComponent(oeffnenButton)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(511, Short.MAX_VALUE)
                .addComponent(oeffnenButton)
                .addContainerGap())
        );
        pack();
    }// </editor-fold>                        

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
	System.exit(0);
    }                                          
     
    public static void main(String args[]) {
	VNCClientGUI wnd = new VNCClientGUI();
    }
    
    public void paint(Graphics g) {
	Image img;
	img = getToolkit().getImage("Duke.jpeg");
	System.out.println("Das ist Image PP41: " + img);
	g.drawImage(img, 0, 0, this);
    }  
    // Variables declaration - do not modify                     
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JButton oeffnenButton;
    // End of variables declaration                   
    
}
 
Beim ersten drüberfliegen: Du solltest das image NICHT in der paint-Methode laden. Das hat zur Folge, dass das Bild bei jedem neuzeichnen neu von der Festplatte geladen wird.

getImage() returnt außerdem SOFORT - d.h. das Bild ist u.U. noch nicht vollständig geladen, wenn es (in der nächsten Zeile) gezeichnet werden soll.

Du solltest das Bild z.B. im Konstruktor laden, und sicherheitshalber noch einen MediaTracker drumwickeln. (Beispielcode in der API-Doku zu MediaTracker).

Es ist übrigens kein GIF, sondern ein JPG. Aber das ist egal :wink:
 
Entweder mit dem MediaTracker oder du sagst

Image img = new ImageIcon("Duke.jpeg").getImage();

Dann ist das Bild auch geladen!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben