PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Frames und Threads



Herr Ritschwumm
17-06-2006, 16:26
Hi,
ich bin gerade dabei eine kleine Applikation zu schreiben. Da sie am Anfang aus Dateien lesen muss, dachte ich mir ein kleiner "SplashScreen" wäre ganz net.
Bis jetzt hab ichs so gemacht, dass der Splash einfach mit Thread.sleep(2000) wartet. Allerdings würde ich es gerne so machen, dass das Fenster verschwindet, nachdem bei dem eigentlichen Programm setVisible(true) aufgerufen wurde.
Hab schon Verschiedenes versucht. Einfach Visible(false) geht ja net wegen static context und wenn ich das JWindow static setz, dann zeigt mein Bild nicht mehr an...
Das mit mit wait() und notifyAll() hab ich trotz verschiedenster Quellen in Google net hinbekommen...:(

Hier mal der Code (in gekürzter Form; hoffe, dass nichts Wichtiges fehlt):

Von der Main-Methode:

package abirechner;

import javax.swing.*;

public class Main {
static JWindow splash=new JWindow();
//Object obj=new Object();
public static void main(String[] args) {
Thread splashThread=new Thread(new Bild());
Thread MainFrame=new Thread(new abirechner());
splashThread.start();
MainFrame.start();

}

}
(Die Variable obj wollte ich zum synchronisieren benutzen; so wie ich das bei "java ist auch eine Insel" verstanden hatte...)

Von der Applikation:

package abirechner;

public class abirechner extends Frame implements ActionListener,Runnable {
Frame AR_Frame=new Frame("AR");
public void run() {
AR_Frame.addWindowListener(wl);
AR_Frame.setSize(750,650);
AR_Frame.setLocationRelativeTo(null);
AR_Frame.setResizable(false);
AR_Frame.setLayout(new BorderLayout());
AR_Frame.setVisible(true);
Main.splash.setVisible(false);
}
}

Vom Splash:

package abirechner;

import java.awt.*;
import java.net.*;
import javax.swing.*;

public class Bild extends JWindow implements Runnable {
Image splashImage;
public void run() {
Main.splash.setSize(420, 300);
Main.splash.setLocationRelativeTo(null);
splashImage = getToolkit().getImage("splash.jpg");
Main.splash.setVisible(true);
//dispose();
}
public void paint(Graphics g) {
g.drawImage(splashImage, 0, 0, this);
}
}

Sorry für das riesen Posting, aber ich denke mit Code is bessser zu helfen.
Vielen Dank für jede Hilfe

Herr Ritschwumm

Herr Ritschwumm
18-06-2006, 16:37
Konnte mein Problem doch durch wait() und notify() lösen.