Bild in Fenster neu laden ?

So, hab schon wieder ein Problem. Jetzt hab ich versucht die Methode
ausgabe() in einem Thread laufen zu lassen, da dass gut zu meinen zuküftigen erweiterungen passen würde.

Nur geht das nicht so ganz. Der Thread dürfte funktionieren, da mir das println etwas in die Konsole schreibt. Nur leider ersetzt die Funktion ausgabe, wenn sie im Thread aufgerufen wird, nicht das bild.

Java:
import javax.swing.*;
import java.awt.*;

public class Test extends JFrame impements JFrame{
	
    static JButton btOK = new JButton("OK");
    static JButton btExit = new JButton("Ende");
    JPanel plButtons = new JPanel();
    JLabel imageLabel;
    
    Test () {
    	super("ein Test");
        plButtons.setLayout(new GridLayout(0,2));
        plButtons.add(btOK);
        plButtons.add(btExit);
        getContentPane().setLayout( new BorderLayout() );
        getContentPane().add("South", plButtons );
        setSize(10,20);
        imageLabel = new JLabel(new ImageIcon("bild2.jpg"));
        getContentPane().add("North", imageLabel);
    }

	public static void main(String[] args) throws Exception {
		Test wnd = new Test();
		wnd.setLocation(100, 100);
		wnd.setSize(300, 200);
		wnd.setVisible(true);
		Thread.sleep(1000);
		wnd.startthread();
	}

	public void ausgabe (){
        imageLabel.setIcon(new ImageIcon("bild1.jpg"));
        pack();
	}

        public void startthread() {
        Thread th = new Thread();
        th.start();
        }

        publiv void run () {
        try {
             System.out.println("irgendwas");
             ausgabe();
       } catch (InterruptedException e) {
       }
       }

}
 
Erstmal hast du hier Code gepostet der so gar nicht kompilieren kann weil du ein extends und implements JFrame hast.

Dann startest du einen Thread ohne diesem überhaupt zu sagen was er tun soll. Damit tut er dann halt auch nichts.

Warum benutzt du nun nicht mehr den Timer?
 
Erstmal hast du hier Code gepostet der so gar nicht kompilieren kann weil du ein extends und implements JFrame hast.

Dann startest du einen Thread ohne diesem überhaupt zu sagen was er tun soll. Damit tut er dann halt auch nichts.

Warum benutzt du nun nicht mehr den Timer?

Ja, sollte natürlich implements Runnable sein.

Wieso, der Thread ruft doch automatisch die Methode run() auf. Das funktioniert auch so. Das Problem ist halt, das er das Bild nicht ins label schreibt.
 
Ich möchte dich wirklich bitten hier nur Code zu posten der auch kompiliert, ansonsten ist es schwierig die wirklichen Fehler zu finden.

Und woher bitte soll der Thread wissen dass er die run Methode aufrufen soll?

Was geht sind verschiedene Varianten:
Java:
public void startthread() {
    Thread th = new Thread( ) {

        public void run() {
            System.out.println("irgendwas");
            ausgabe( );
        }
    };
    th.start( );
}

oder

Java:
public void startthread() {
    Thread th = new Thread(this);
    th.start( );
}

public void run() {
    System.out.println("irgendwas");
    ausgabe( );
}
 
Zurück