Threads kein neues Fenster erzeugen lassen

Status
Nicht offen für weitere Antworten.
N

Nose

Gast
Hallo zusammen,

ich habe vor Kurzem angefangen mich mit Swing zu beschäftigen und so kam es, dass ich einmal einen simplem Countdown in eine "schöne" GUI verpacken wollte. Also habe ich meinen Konsolenbasierten Countdown versucht zu portieren.
Doch nun kämpfe ich mit dem Problem, dass immer wenn ich einen neuen Thread starte, sich ein neues Fenster öffnet. Weiss hier wer Rat und kann mich auf meinen evtl. kleinen Fehler aufmerksam machen?
Hier mal beide Klassen:
Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class GUI extends JFrame implements Runnable{
    
    static Thread threadCounter;
    static pdscounter Counter = new pdscounter();
    static JTextField Anzeige = new JTextField("Zeit:", 0);// 0 für zentiert
    static JLabel Stunden = new JLabel("Stunden:");
    static JLabel Minuten = new JLabel("Minuten:");
    static JLabel Sekunden = new JLabel("Sekunden:");
    static JButton Button = new JButton("Start");
    static JButton Stop = new JButton("Pause");
    static JPanel ButtonPanel = new JPanel();
    static JPanel Zeiten = new JPanel();
    static JPanel Eingaben = new JPanel();
    static JTextField StundenEingabe = new JTextField("0");
    static JTextField MinutenEingabe = new JTextField("0");
    static JTextField SekundenEingabe = new JTextField("0");
    static int status = 0;
    
    public void run(){
	initialisierung();
    }
    
    GUI(){
	super("pds-counter");
	setLayout(null);
	this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
	
	Zeiten.setLayout(new GridLayout(0, 1));
	Eingaben.setLayout(new GridLayout(0, 1));
	ButtonPanel.setLayout(new GridLayout(0, 1));
	
	Zeiten.add(Stunden);
	Zeiten.add(Minuten);
	Zeiten.add(Sekunden);
	Eingaben.add(StundenEingabe);
	Eingaben.add(MinutenEingabe);
	Eingaben.add(SekundenEingabe);
	ButtonPanel.add(Button);
	ButtonPanel.add(Stop);
	
	getContentPane().add(Zeiten);
	getContentPane().add(Eingaben);
	getContentPane().add(ButtonPanel);
	getContentPane().add(Anzeige);
	
	Anzeige.setBounds(10, 50, 150, 50);
	Zeiten.setBounds(10, 190, 75, 75);
	Eingaben.setBounds(90, 190, 50, 75);
	ButtonPanel.setBounds(165, 190, 75, 75);
	
	pack();
	setSize(300, 300);
	setVisible(true);
    }
    
    static void setStatus(int value){
	status = value;
    }
    
    static int getStatus(){
	return status;
    }
    
    public static void initialisierung (){
	
	String Std, Min, Sek;
	int StdConvert=0;
	int MinConvert=0;
	int SekConvert=0;
	
	
	Std = StundenEingabe.getText();
	Min = MinutenEingabe.getText();
	Sek = SekundenEingabe.getText();

	try{
	    StdConvert = Integer.parseInt(Std);
	}catch (NumberFormatException e) {
	}
	
	try{
	    MinConvert = Integer.parseInt(Min);
	}catch (NumberFormatException e) {    
	}
	
	try{
	    SekConvert = Integer.parseInt(Sek);
	}catch (NumberFormatException e) {    
	}
	
	Counter.setStunden(StdConvert);
	Counter.setMinuten(MinConvert);
	Counter.setSekunden(SekConvert);
	GUIcounter();
    }
    
    public static void GUIcounter(){
	for(int time = Counter.calcTime(); time >= 0; time--){
	    Anzeige.setText(Counter.calculation() + " noch uebrig.");
	    
	    System.out.println(Counter.calculation());
	    pdscounter.secondwait(1000L);   
	    Counter.setOverallTime();
	    
	} 	
	Counter.freakingbeep();
	setStatus(2);
	System.out.println(getStatus());
    }
    
    public static void createThread(){
	threadCounter = new Thread(new GUI());
	
    }
    

    public static void main(String args[]){
	//new GUI();
	createThread();
	
	Button.addActionListener(new ActionListener(){
	    public void actionPerformed(ActionEvent e){
		if(getStatus() == 0) threadCounter.start();
		if(getStatus() == 1) threadCounter.resume();
		if(getStatus() == 2){
		    createThread();
		    setStatus(0);
		}
	    }
	    
	});
	
	Stop.addActionListener(new ActionListener(){
	    public void actionPerformed(ActionEvent e){
		
		setStatus(1);
		threadCounter.suspend();
	    }
	    
	});
	
    }
}

Code:
import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class pdscounter {
    int Stunden, Minuten, Sekunden, overallTime;   
    
    public static void beep(int Anzahl){
	for(int i = 0; i < Anzahl; i++){
	     Toolkit.getDefaultToolkit().beep();
	}
    }
    
    public static void secondwait(long zeit){
	try{
	    Thread.sleep(zeit);
	} catch(InterruptedException e){
	    System.out.println("Fehler!");
	}
    }
    
    public static String eingabeLesen() {
        try {
            return new BufferedReader(new InputStreamReader(System.in)).readLine();
        } catch (IOException io) {
            System.out.println("Fehler!");
            return "";
        }
    }
    
    public static int eingabeInt() {
        try {
            return Integer.parseInt(eingabeLesen());
        } catch (NumberFormatException e) {
            System.out.println("Keine oder falsche Eingabe erfolgt. Setze Eingabe auf 0.");
            return 0;
        }
    }
    
    public void setStunden(int Stunden){
	this.Stunden = Stunden;
    }
    
    public void setMinuten(int Minuten){
	this.Minuten = Minuten;
    }
    
    public int getStunden(){
	return this.Stunden;
    }
    
    public int getMinuten(){
	return this.Minuten;
    }
    
    public void setSekunden(int Sekunden){		
	this.Sekunden = Sekunden;
    }
    
    public int getSekunden(){
	return this.Sekunden;
    }
    
    public int calcTime(){
	this.overallTime = (getMinuten()*60) + (getStunden()*3600) + getSekunden();
	return this.overallTime;
    }
    
    public void setOverallTime(){
	this.overallTime = this.overallTime - 1;
    }
    
    public void setOverallTimeToZero(){
	this.overallTime = 1;
    }
    
    public int getOverallTime(){
	return this.overallTime;
    }
    
    public void freakingbeep(){
	for(int u = 0; u < 2; u++){
		for(int i = 0; i < 10; i++){
		    beep(1);
		    secondwait(50L);
		}
		secondwait(1000L);
	}
    }
    
    /* Calculation führt die Zeitberechnung durch. Dies geschieht durch Modulooperationen
     * an den Gesammtsekunden.
     * Bsp.: Die Stunden:
     * 			Gesammtzeit MOD 3600 ergibt die Restminuten
     * 			Gesammtzeit - (Gesammtzwit MOD 3600) ergibt die Zeit, die ohne Rest
     * 							     teilbar wäre.
     * */
    public String calculation(){
	int stdBuffer, minBuffer, sekBuffer;
	stdBuffer = (getOverallTime()-(getOverallTime()%3600))/3600;
	minBuffer = ((getOverallTime()%3600)-((getOverallTime()%3600)%60))/60;
	sekBuffer = (getOverallTime()%3600)%60;
	
	return stdBuffer+":"+minBuffer+":"+sekBuffer;
    }
    
   
    
    public void counter(){
	for(int time = calcTime(); time >= 0; time--){
	    System.out.println(calculation()+" noch verbleibend.");
	    secondwait(1000L);   
	    setOverallTime();
	} 	
	freakingbeep();
    }
    
}

Zuerst hatte ich das Problem, dass der Swingthread alles blokierte, also habe ich einen neuen Thread erstellt, der das Problem lösen sollte. Das funktioniert auch, bis ich versuche das Ganze neuzustarten, also den User nach Ablauf des Counters neue Werte eingeben lasse.
Also versuchte ich einen neuen Thread zu erstellen, quasi den alten zu "überschreiben". Das scheint allerdings nicht so zu funktionieren, zumindest nicht wie ich es mit erhofft habe, denn ein neuer Thread erzeugt wieder ein neues Fenster.

Ein wenig HIlfe wäre echt nett.
MfG
nose

PS: alles im Eigenstudium beigebracht, bin also für Kritik gerne offen, wenn es um Programmierstil geht. :)
 

trazzag

Bekanntes Mitglied
in Zeile 117 erzeugst du mit jedem neuen Thread eine neue GUI (threadCounter = new Thread(new GUI());) - einfach die alte übergeben, statt eine neue zu erzeugen.
 
N

Nose

Gast
Das mag zwar dumm kingen, aber wie stelle ich das an?
Wenn ich new Thread(threadCounter) startet das Programm nichtmehr. Muss ich das in eine neue Klasse auslagern?

MfG
Nose
 

Wildcard

Top Contributor
Swing ist nicht threadsicher! Jede Swing Methode muss aus dem Event Dispatch Thread (EDT) aufgerufen werden, es sei denn sie ist explizit als threadsicher gekennzeichnet.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
frager2345 Threads -> Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
J GUI Ausgaben aus Threads AWT, Swing, JavaFX & SWT 13
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
N JavaFX Logging des JavaFX Application Threads mit Log4J AWT, Swing, JavaFX & SWT 3
U JAVAFX observer und threads AWT, Swing, JavaFX & SWT 1
J Textlabel verändern mit parallelen Threads AWT, Swing, JavaFX & SWT 7
Sugan Inhalte mit Threads ändern -> java.lang.IllegalStateException AWT, Swing, JavaFX & SWT 6
R Straßenkreuzung - Ampeln mit Threads koordinieren AWT, Swing, JavaFX & SWT 5
C Threads Swing AWT, Swing, JavaFX & SWT 11
Z JavaFX Threads AWT, Swing, JavaFX & SWT 4
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
S Java Swing GUI mit MVC und Threads AWT, Swing, JavaFX & SWT 6
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
B GUI mit Threads aufbauen AWT, Swing, JavaFX & SWT 5
E Threads Ausgaben in GUI anzeigen lassen AWT, Swing, JavaFX & SWT 14
P JavaFX 2 (2.1 Beta) Threads AWT, Swing, JavaFX & SWT 7
B Threads in Swing AWT, Swing, JavaFX & SWT 4
M Problem mit Threads AWT, Swing, JavaFX & SWT 64
R Swing Java Swing Gui und nebenläufige Threads AWT, Swing, JavaFX & SWT 4
S Swing Threads Windows 7 64 bit AWT, Swing, JavaFX & SWT 12
J Threads + JFrame AWT, Swing, JavaFX & SWT 4
R Java threads und synchronized AWT, Swing, JavaFX & SWT 15
R Swing Swing und die Threads AWT, Swing, JavaFX & SWT 9
N Swing Threads sollen Tabtitel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 4
S Gui und Aufgaben Threads AWT, Swing, JavaFX & SWT 12
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
M Prioritäten bei SwingWorker / Threads AWT, Swing, JavaFX & SWT 9
B Swing GUI und Threads AWT, Swing, JavaFX & SWT 4
R Korrektes manipulieren der GUI aus anderen Threads heraus AWT, Swing, JavaFX & SWT 19
S Threads und Layout AWT, Swing, JavaFX & SWT 9
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
W GUI in mehreren Threads AWT, Swing, JavaFX & SWT 5
F Swing Anfängerproblem Threads AWT, Swing, JavaFX & SWT 6
S Swing Threads und das Ändern des Hintergrundes ... AWT, Swing, JavaFX & SWT 2
S Zeichnen in Threads AWT, Swing, JavaFX & SWT 4
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
J SWT SWT und Threads AWT, Swing, JavaFX & SWT 5
borobudur SWT SWT-Framework und Threads AWT, Swing, JavaFX & SWT 12
W Threads nacheinander aufführen AWT, Swing, JavaFX & SWT 5
A Swing und Threads AWT, Swing, JavaFX & SWT 8
B JProgressbar wird nicht aktualisert, trotz Threads AWT, Swing, JavaFX & SWT 6
K Timer und Threads ruckeln für Fotoschwenk AWT, Swing, JavaFX & SWT 3
S JProgressBar und Threads AWT, Swing, JavaFX & SWT 11
G Probleme mit jList und Threads. AWT, Swing, JavaFX & SWT 3
R Swing & Threads AWT, Swing, JavaFX & SWT 4
R 2 Threads nacheinander. Einer terminiert, der andere nicht. AWT, Swing, JavaFX & SWT 9
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
P Threads und Swing bzw. AWT AWT, Swing, JavaFX & SWT 15
W Threads und trotzdem keine Nebenläufigkeit AWT, Swing, JavaFX & SWT 13
G Fenster erst nach Stoppen des Threads anzeigen AWT, Swing, JavaFX & SWT 3
G problem mit threads/repaint ! AWT, Swing, JavaFX & SWT 2
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2
A JTextArea und Threads AWT, Swing, JavaFX & SWT 9
B Probleme mit GUI und Threads AWT, Swing, JavaFX & SWT 17
E repaint(), EDT-Warteschlange und Threads AWT, Swing, JavaFX & SWT 26
S Threads in Java AWT, Swing, JavaFX & SWT 22
G AWT + Threads = nicht gut :P AWT, Swing, JavaFX & SWT 6
F Verständis Problem zu Threads AWT, Swing, JavaFX & SWT 2
M Swinganwendung Threads mit JProgressBar AWT, Swing, JavaFX & SWT 7
V Problem mit Aktualisieren von JList mit Threads AWT, Swing, JavaFX & SWT 3
U FileChooser Layout - Threads? AWT, Swing, JavaFX & SWT 17
R JProgressBar ohne Threads verwenden AWT, Swing, JavaFX & SWT 6
I JList, AbstractListModel und nebenläufige Threads AWT, Swing, JavaFX & SWT 2
S "Millionen" von Threads? Programm komplett beenden AWT, Swing, JavaFX & SWT 2
M Konsolenprg-Ausgabe in GUI geleitet - Brauche ich Threads? AWT, Swing, JavaFX & SWT 2
K Swing und Threads AWT, Swing, JavaFX & SWT 11
M Threads in Swing? AWT, Swing, JavaFX & SWT 2
C Schweres Problem mit JDialog und Threads! Anzeige blockiert! AWT, Swing, JavaFX & SWT 5
N Netzwerk-Applikation, SWT und Threads AWT, Swing, JavaFX & SWT 4
R createBufferStrategy() und Threads AWT, Swing, JavaFX & SWT 5
D Threads unter JFrame AWT, Swing, JavaFX & SWT 2
G Nochmal Threads und Einfrieren des GUI :( AWT, Swing, JavaFX & SWT 10
V Swing & Threads ??? AWT, Swing, JavaFX & SWT 3
D Problem mit JProgressBar und Threads AWT, Swing, JavaFX & SWT 7
N imageIcon zeigt kein Bild an AWT, Swing, JavaFX & SWT 5
P kein Scrollen nach affinertransformation bei mouse dragged AWT, Swing, JavaFX & SWT 2
Fridolin111 Der KeyListener Löst kein event aus AWT, Swing, JavaFX & SWT 6
F Kein JavaFX mehr im Eclipse Wizard AWT, Swing, JavaFX & SWT 1
S Swing Bei start des Programmes kein Fenster zu sehen AWT, Swing, JavaFX & SWT 1
L JavaFX TableView kein content text ändern AWT, Swing, JavaFX & SWT 2
cool_brivk24 Swing ImageIcon lädt kein Bild AWT, Swing, JavaFX & SWT 12
L JavaFX Anderer Text, wenn kein Platz ist. AWT, Swing, JavaFX & SWT 1
C JavaFX ProGuard -> TableView kein Inhalt AWT, Swing, JavaFX & SWT 7
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
P Kein Bild wird angezeigt bei ImageIcon AWT, Swing, JavaFX & SWT 16
krgewb Kein src-Verzeichnis AWT, Swing, JavaFX & SWT 1
A Swing CardLayout - kein Wechsel möglich AWT, Swing, JavaFX & SWT 5
Wurstkopp JavaFX JavaFX KeyEvent kein Zahlencode um unbekannte Mediatasten auszuwerten? AWT, Swing, JavaFX & SWT 0
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
S Kein JFrame unter Mac? AWT, Swing, JavaFX & SWT 8
F Gui weicht von Designpreview ab (kein fensterrahmen, andere größe) AWT, Swing, JavaFX & SWT 13
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
Seikuassi Swing JTextField nimmt kein Einfügen (Strg+V) an AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben