Wieso wird dem JFrame kein eigenes Icon zugewiesen?

IZZO

Mitglied
Ich versuche seit Stunden hier dem JFrame oben links ein eigenes Icon zu verpassen. Der Code den ich geschrieben hab ist vom Syntax her korrekt, doch das Icon wird leider nicht angezeigt. Was mache ich falsch? Das Bild ist im gleichen Package gespeichert.

Code:
package proppack;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;



public class Probieren implements ActionListener {
	
	JButton b = new JButton("b");
	JTextField field = new JTextField();
	JFrame frame1 = new JFrame();
	//ImageIcon uhr = new ImageIcon(getClass().getResource("uhr.jpg"));
    //JLabel uhr = new JLabel(img);
	Image icon = new ImageIcon("uhr.jpg").getImage();
    
	
	
	public Probieren() {
		
	machframe(700,300);
		
	}

	public void machframe(int x, int z){
		
		frame1.setIconImage(icon);
		frame1.setLayout(null);
		frame1.setBounds(0, 0, x, z);
		b.setBounds(50,50,50,50);
		b.addActionListener(this);
		field.setBounds(200,200,300,18);
		field.setEditable(false);
		//frame1.add(uhr);
		frame1.add(b);
		frame1.add(field);
		//uhr.setBounds(0,0,700,300);
		frame1.setVisible(true);
		frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
			
		while(true) {
				
				SimpleDateFormat formatter = new SimpleDateFormat ("dd.MM.yyyy 'at' HH:mm:ss ");
				Date currentTime = new Date();
				field.setText("Zeit und Datum : " + formatter.format(currentTime));
			}
		}
		
		public void actionPerformed(ActionEvent e) {
			
			if(e.getSource() == (this.b)){
				if(frame1.isShowing()){
				frame1.setVisible(false);
				
				  try { 
			            Thread.sleep(10000); 
			        } catch (InterruptedException ex) { 
			        	ex.printStackTrace(); 
			        }
					frame1.setVisible(true);
				}
			
			}	
			
		}

	public static void main(String[] args) {

		  new Probieren();
	
	}

}
 
Zuletzt bearbeitet:
Hi

a) Du hast eine Endlosschleife im Konstruktor
b) Du hast ein Sleep im EDT
Beide Sachen sollten möglichst schnell fertigwerden,
weil sonst die ganze GUI hängt (bzw. gar nie richtig angezeigt wird)

c) Empfehle sehr, die Zuweisungen von Zeile 20-25 in den Konstruktor (oder machframe)
zu verschieben und Exceptions abzufangen.
 
Aber wenn ich Z.20-25 in den Konstruktor (bzw. machframe) verschiebe dann geht die actionPerformed() methode doch nicht mehr. und ich dachte auch es liegt an der endlosschleife. klappt aber auch ohne nicht
 
Warum sollte actionPerformed dann nicht mehr funktionieren?

edit: Nur die Zuweisungen zu den Varianlen in den Konstruktor,
nicht die Deklaration der Variablen selbst.
 
Zurück