Threads und Swing bzw. AWT

Status
Nicht offen für weitere Antworten.

Paddel

Bekanntes Mitglied
Code:
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import java.util.RandomAccess;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;




public class Quicksort extends Frame implements Runnable{
Button berechnen = new Button("berechnen");

		int[] zahlen = new int[300];
			public Quicksort(){
				super();
			
				
				for(int i = 0;i<300;i++)
					zahlen[i] = (int) (Math.random() * 300);
			      setLayout(new BorderLayout());
			      setVisible(true);
			      setSize(400, 500);
			      add(berechnen,BorderLayout.SOUTH);
			      berechnen.addActionListener(new schalterBerechnen());
	
			
//			berechnen.addActionListener(new schalterBerechnen());
			 

			}
			
		public void quicksort(int i, int j){
			if(i < j){
			int l = i;
			int r = j;
			int p = zahlen[(i+j) / 2];
			while(i < j){
				while(zahlen[i] < p) i++;
				while(zahlen[j] > p)  j--;
				if(i <= j) {
					swap(i,j);
				i++;j--;
				}
			}
			
			quicksort(l, j);
			quicksort(i, r);
			}
		}
		public void start2()
		{
			quicksort(0, zahlen.length-1);
		}
		public void paint(Graphics g){
			for(int i = 0;i<zahlen.length;i++)
				g.fillRect(i, zahlen[i], 5, 5);
			
		}
		
		class schalterBerechnen implements ActionListener{

			public void actionPerformed(ActionEvent arg0) {
			
				start2();
				
			}
			
		}
		public void swap(int i,int j){
			int tmp = zahlen[i];
			zahlen[i] = zahlen[j];
			zahlen[j] = tmp;
			try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
			
				e.printStackTrace();
			}
			repaint();
		}
		public void ausgabe(){
			for(int i = 0; i < zahlen.length;i++)
				System.out.println(zahlen[i]);
		}
		public static void main(String[] args) {
			Quicksort algo = new Quicksort();
			algo.run();			
			
			
			
		}
		public void run() {
	
			
		}
}
Hallo. Das Programm soll Quicksort grafisch ausführen sobald ich auf den Button "berechnen" klicke. Ohne Threads funktionierte das ganze auch perfekt. Allerdings brauchte ich die Threads um die Zeit zu stoppen. Hatte das dann erst mit Swing gemacht und sobald ich auf den Button geklickt habe lief es nicht mehr. Jetzt habe ich es in AWT umgeschrieben weil ich gelesen hatte das SWING Probleme mit Threads hat. Jetzt stürzt das ganze allerdings schon wieder ab. Gibt es einen Trick um eine Klasse als Thread zu starten und einen Action Listener anzusürechen in einem Thread. Ohne Threads geht das alles reibungslos.

Und ich hätte noch eine 2te Frage. Meine Buttons erscheinen erst wenn ich einmal auf den Rand klicke. Vorher sind die gar nicht vorhanden. Wenn mir das jemand noch ekrlären können wäre ich sehr dankbar für...
P.S. Antwort kann 24 Stunden dauern weil ich kein Internet zu Hause habe
Gruss
 

assoziatives pseudonym

Aktives Mitglied
Paddel hat gesagt.:
Allerdings brauchte ich die Threads um die Zeit zu stoppen.
Nö, brauch man nicht ... is auch ungenauer, weil zum Starten der Threads auch Zeit mit draufgeht
Paddel hat gesagt.:
Jetzt habe ich es in AWT umgeschrieben weil ich gelesen hatte das SWING Probleme mit Threads hat.
Swing hat keine Probleme mit Threads, de facto IST Swing ein Thread :arrow: wenn man es richtig einsetzt, zb. so wie es sich gehört über invokeLater
Paddel hat gesagt.:
Gibt es einen Trick um eine Klasse als Thread zu starten und einen Action Listener anzusürechen in einem Thread.
sehr leicht:
Code:
class blub extends Thread {
   blub() {
      this.start();
}
   public void run() {
      listener l = new listener();
      l.machWas(listener.aktion1);
      meinekomponente.addActionListener(l);
      //den code hier
   }
}
class listener implements ActionListener {
   private String Wert = "";
   public final static byte aktion1 = 1;
   private byte aktion = 0;
   listener() {
      //initialisierung hier?
}
   void setzeWas(String wert) {
      this.wert = wert
}
   void machWas(byte aktion) {
      this.aktion = aktion;
      //beeinflussender Code hier, so lassen sich sehr effizient Abläufe beeinflussen
}
   public void actionPerformed() {
      // hier is was passiert
}}
Paddel hat gesagt.:
Meine Buttons erscheinen erst wenn ich einmal auf den Rand klicke.
also ich muss leider sagen: dein Quelltext ist die Hölle ... Fehler über Fehler und keine erkennbare logische Struktur. Aber ich kann mir (ohne den Code zur Gänze gelesen zu haben) vorstellen an was es liegt:

JFrame visible gemacht bevor die Buttons hinzugefügt wurden. Bei AWT/Swing muss man sehr auf die Reihenfoplge bestimmter Befehle achten, weil diese sofort eine Aktion auslösen bzw. als nächstes in der Queue stehen, Swing ist relativ träge und updated sich nicht immer selbst.

Wende doch BITTE einmal OOP auf deinen Code an, dann erkläre ich dir auch detailliert wo die Fehler liegen
 

Wildcard

Top Contributor
Nimm wieder Swing, AWT ist veraltet. Swing ist nicht threadsicher, das ist richtig, aber kein einziges Grafisches Toolkit in keiner einzigen Sprache ist threadsafe, das ist nunmal so.
Nicht threadsafe heißt übrigens nicht, das man keine Threads verwenden darf, sondern nur, das bestimmte Methoden des Toolkits aus dem Event Dispatch Thread gestartet werden müssen.
Dein Problem liegt übrigens daran, das du keinen Thread startest, sondern einfach eine Methode aufrufst. Threads startet man mit new Thread(runnable).start()
 

André Uhres

Top Contributor
Code:
/*
 * Quicksort.java
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Quicksort extends JFrame implements Runnable {
    private JButton berechnen = new JButton("berechnen");
    private int[] zahlen = new int[300];
    public Quicksort() {
        super();
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        for (int i = 0; i < 300; i++) {
            zahlen[i] = (int) (Math.random() * 300);
        }
        setSize(400, 500);
        add(berechnen, BorderLayout.SOUTH);
        berechnen.addActionListener(new SchalterBerechnen());
        add(new DrawingPanel());
    }
    public void quicksort(int i, int j) {
        if (i < j) {
            int l = i;
            int r = j;
            int p = zahlen[(i + j) / 2];
            while (i < j) {
                while (zahlen[i] < p) {
                    i++;
                }
                while (zahlen[j] > p) {
                    j--;
                }
                if (i <= j) {
                    swap(i, j);
                    i++;
                    j--;
                }
            }
            quicksort(l, j);
            quicksort(i, r);
        }
    }
    public void swap(int i, int j) {
        int tmp = zahlen[i];
        zahlen[i] = zahlen[j];
        zahlen[j] = tmp;
        try {
            Thread.sleep(200);
        } catch (InterruptedException e) {

            e.printStackTrace();
        }
        repaint();
    }
    public void ausgabe() {
        for (int i = 0; i < zahlen.length; i++) {
            System.out.println(zahlen[i]);
        }
    }
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Quicksort().setVisible(true);
            }
        });
    }
    @Override
    public void run() {
        quicksort(0, zahlen.length - 1);
        berechnen.setEnabled(true);
    }
    class SchalterBerechnen implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent arg0) {
            berechnen.setEnabled(false);
            new Thread(Quicksort.this).start();
        }
    }
    class DrawingPanel extends JPanel {
        @Override
        protected void paintComponent(final Graphics g) {
            super.paintComponent(g);
            for (int i = 0; i < zahlen.length; i++) {
                g.fillRect(i, zahlen[i], 5, 5);
            }
        }
    }
}
 

Tobias

Top Contributor
Ich sehe da keine Bestätigung sondern lediglich eine Problemlösung, wo du keine geliefert hast.
 

assoziatives pseudonym

Aktives Mitglied
mit wem redest du? Was willst du damit sagen?

Im Übrigen is der Quelltext von André unvollständig und hält sich an absolut keine Norm ... aber zumindest is es ein funktionierendes (wenn ergänzt) Beispiel
 

Wildcard

Top Contributor
tha_specializt hat gesagt.:
Im Übrigen is der Quelltext von André unvollständig und hält sich an absolut keine Norm ... aber zumindest is es ein funktionierendes (wenn ergänzt) Beispiel
Sagst du? :shock: Im gleichen Thread in dem du das gepostet hast?
Code:
class blub extends Thread {
   blub() {
      this.start();
}
   public void run() {
      listener l = new listener();
      l.machWas(listener.aktion1);
      meinekomponente.addActionListener(l);
      //den code hier
   }
}
class listener implements ActionListener {
   private String Wert = "";
   public final static byte aktion1 = 1;
   private byte aktion = 0;
   listener() {
      //initialisierung hier?
}
   void setzeWas(String wert) {
      this.wert = wert
}
   void machWas(byte aktion) {
      this.aktion = aktion;
      //beeinflussender Code hier, so lassen sich sehr effizient Abläufe beeinflussen
}
   public void actionPerformed() {
      // hier is was passiert
}}
 

assoziatives pseudonym

Aktives Mitglied
1) das war n Beispiel
2) kein allzu schlechtes, immerhin besser als grossgeschriebene Klassennamen und Befehle, die anscheinend aus dem nichts kommen :arrow: kennst du
Code:
this
? Exzessiv nutzen, das ist OOP
2) seit wann muss man um Erlaubnis fragen, wenn man eigene Fehler nachträglich ausbessert?
3) du assoziierst Pseudonyme mit irgendwelchen Absichten / Ansichten, du "putziger" :arrow: geh bitte in irgendein 1337h4xx0r-Forum
4) Bitte mit der infantilen Trollerei aufhören?
 

Tobias

Top Contributor
Wer Beiträge nachträglich sinnentstellend editiert UND sich dann wundert das nachfolgende Beiträge keinen Sinn mehr machen ...
 

Paddel

Bekanntes Mitglied
also wollte hier nich für Streit sorgen. Aber danke es geht jetzt beides. Wusste nur nicht wo ich nachschauen musste... besten Dank!
 
B

Beni

Gast
Es bist nicht du Paddel der für Streit sorgt, es ist ein gewisser Spezialisten-Troll der keinen Anstand (und Wissen...) hat :wink:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
C Threads Swing AWT, Swing, JavaFX & SWT 11
S Java Swing GUI mit MVC und Threads AWT, Swing, JavaFX & SWT 6
B Threads in Swing AWT, Swing, JavaFX & SWT 4
R Swing Java Swing Gui und nebenläufige Threads AWT, Swing, JavaFX & SWT 4
R Swing Swing und die Threads AWT, Swing, JavaFX & SWT 9
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
A Swing und Threads AWT, Swing, JavaFX & SWT 8
R Swing & Threads AWT, Swing, JavaFX & SWT 4
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2
K Swing und Threads AWT, Swing, JavaFX & SWT 11
M Threads in Swing? AWT, Swing, JavaFX & SWT 2
V Swing & Threads ??? AWT, Swing, JavaFX & SWT 3
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
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
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
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
M Problem mit Threads AWT, Swing, JavaFX & SWT 64
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
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
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
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 2 Threads nacheinander. Einer terminiert, der andere nicht. AWT, Swing, JavaFX & SWT 9
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
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
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
G problem mit threads/repaint ! 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
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
D Problem mit JProgressBar und Threads AWT, Swing, JavaFX & SWT 7
Juelin javax.swing in javafx AWT, Swing, JavaFX & SWT 1
A Eclipse 2023 und Swing AWT, Swing, JavaFX & SWT 4
W 2 JTables in einem Swing-Fenster? AWT, Swing, JavaFX & SWT 5
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Actionlistener mit Java Swing AWT, Swing, JavaFX & SWT 2
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
H Swing Buttons erst nach Klick sichtbar AWT, Swing, JavaFX & SWT 13
ExceptionOfExpectation Anpassung von JKomponentengrößen (Swing) AWT, Swing, JavaFX & SWT 3
thor_norsk AWT SWING Aufgabe AWT, Swing, JavaFX & SWT 7
U Zwei Fragen zu eienr Swing Aufgabe AWT, Swing, JavaFX & SWT 2
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
H Swing , GridLayout, Größenbestimmung der Komponenten im Layout AWT, Swing, JavaFX & SWT 8
H Simple Animation mit Swing AWT, Swing, JavaFX & SWT 2
Guybrush Threepwood Einfachste Möglichkeit zum Abspielen eines Videos in Swing AWT, Swing, JavaFX & SWT 4
M Swing GridLayout AWT, Swing, JavaFX & SWT 2
O return-Statement mit Swing AWT, Swing, JavaFX & SWT 6
O Ein Java-Programm mit Swing steuern AWT, Swing, JavaFX & SWT 1
Monokuma Swing zu JavaFX AWT, Swing, JavaFX & SWT 5
J Swing Slider AWT, Swing, JavaFX & SWT 11
G Thread starten Swing AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben