Swing-Gui hängt scheinbar

Status
Nicht offen für weitere Antworten.

Exceptionist

Aktives Mitglied
huhu, wie kann ich vermeiden, dass mein gui so aissieht, als würd es hängen??

ich starte mehrere http-requests und während die abgearbeitet werden siehts so aus, als wär des ding abgestürzt.
und ich weiß net wie ich über das gui nen neuen thread starte.
es muss doch da auch ne möglichkeit geben innerhalb der gui-klasse die methode, die die requests abarbeitet in einen neuen thread zu packen oder?
 
S

SlaterB

Gast
genau,

einen Thread startet man mit
new Thread(Runnable).start();

das geht von der GUI aus genauso wie überall anders,
lies doch ein Thread-Kapitel in einem Lehrbuch
 

Wolfgang Lenhard

Bekanntes Mitglied
Eine einfache Möglichkeit, wenn es nur um kleine Aufgaben geht:

Code:
SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				//hier kommt der Code hin
			}
});
 

Exceptionist

Aktives Mitglied
also des von wolfgang funzt wirklich nicht.. und slater.. wenn ich akut nen lehrbuch hier hätte, würd ich des schon gelesen haben.
 

Wildcard

Top Contributor
Exceptionist hat gesagt.:
und slater.. wenn ich akut nen lehrbuch hier hätte, würd ich des schon gelesen haben.
Schau doch in die Java Insel, oder so. Im Prinzip hat er dir aber schon gesagt wie es funktioniert. Ist doch Jacke wie Hose ob das nun der UI-Thread ist, oder ein anderer.
 

Exceptionist

Aktives Mitglied
das is prima, genau da lieber Verjigorm, hab ich grad schon geguckt und gelesen.

jedoch scheint das nicht so wirklich klappen zu wollen.
egal ob ich runnable bei meinem gui implementiere oder das anonym probiere, das alles fruchtet iwie nich.

trotzdem danke für eure mühen und die hier vergeudete zeit
 

Verjigorm

Top Contributor
Exceptionist hat gesagt.:
das is prima, genau da lieber Verjigorm, hab ich grad schon geguckt und gelesen.

jedoch scheint das nicht so wirklich klappen zu wollen.
egal ob ich runnable bei meinem gui implementiere oder das anonym probiere, das alles fruchtet iwie nich.

trotzdem danke für eure mühen und die hier vergeudete zeit

Zeig uns mal nen bissl Code, dann wird dir auch schneller geholfen =)
Und Zeit vergeuden tun wir hier selten, weil das merkste schon, dann antwortet keiner mehr :D
 

Exceptionist

Aktives Mitglied
also aufgegeben habe ich nicht, ich wollte lediglich nicht weiterhin eure zeit verschwenden!!

hier ist der code vom window:

Code:
/*
 * Copyright (c) 2004 Web Arts AG - [url]http://www.web-arts.com[/url]
 * 
 * TODO Enter description of the java file here
 *
 * Created on May 23, 2008 by bcliffers
 *
 * $Id$
 * $Source$
 *
 * TODO Create test case for this class
 */
package de.bcliffers;

import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.lang.reflect.InvocationTargetException;

import javax.swing.*;


public class DCWin extends JFrame implements Runnable {
    /**
     * 
     */
    private static final long serialVersionUID = Long.parseLong("13087830820");

    private Container cp;

    // Menü-Elemente
    private final JMenuBar mymb = new JMenuBar();
    private final JMenu fileX = new JMenu("Datei");
    private final JMenu stylemen = new JMenu("Style wechseln");
    private final JMenuItem menuMotif = new JMenuItem("Mac-Style");
    private final JMenuItem menuMetal = new JMenuItem("Metal-Style");
    private final JMenuItem menuWindows = new JMenuItem("Windows-Style");
    private final JMenuItem fileChoose = new JMenuItem("Datei auswählen");
    private final JTextField domain_eingabe = new JTextField();
    private final JButton btn_start = new JButton("DirectoryListing prüfen");
    private final JButton btn_clear = new JButton("Reset");
   
    // Panels für die Ein- und Ausgabebereiche
    private final JPanel allEingabe = new JPanel();
    private final JPanel domainEingabe = new JPanel();
    private final JPanel allAusgabe = new JPanel();
    private final JTextArea info = new JTextArea();
    private final JScrollPane scroll = new JScrollPane(info);
    private final DChecker dcheck = new DChecker();
    private final DCWin win ;
    
    
    public DCWin() {
        super();
        win = this;
        init();
    }

    public DCWin(String title) {
        super(title);
        win = this;
        init();
        
    }

    public void init() {
        this.setSize(1000, 600);
        this.setLocation(50, 50);
        this.setLayout(new BorderLayout(5,5));
        this.setJMenuBar(mymb);
        mymb.add(fileX);
        mymb.add(stylemen);
        fileX.add(fileChoose);
        stylemen.add(menuMotif);
        stylemen.add(menuMetal);
        stylemen.add(menuWindows);
        cp = this.getContentPane();
        cp.setBackground(new Color(255, 255, 255));
       
      //  ladestatus.setVisible(false);
   
       
        //windowListener der entsprechend alle funktionen killt, wenn das fenster geschlossen wird.
        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent we){
                setVisible(false);
                dispose();
                System.exit(0);
            }
        });
        
       //ActionListener für das stylemenü
        menuMotif.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae) {
                changeLaF("Motif");
          }
        });
        //ActionListener für das stylemenü
      menuMetal.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae) {
                changeLaF("Metal");
            }
        });
      //ActionListener für das stylemenü
      menuWindows.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent ae) {
                changeLaF("Windows");
              
            }
        });
      //JFIlechooser wird aufgerufen und die ausgewählte datei übergeben
      fileChoose.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent ae) {
            JFileChooser fileChooser = new JFileChooser(".");
            fileChooser.addChoosableFileFilter(new SimpleFileFilter("txt", "Textfiles"));
            int returnValue = fileChooser.showOpenDialog(null);
            if (returnValue == JFileChooser.APPROVE_OPTION) {
              File selectedFile = fileChooser.getSelectedFile(); 
              String[] datei = dcheck.dateiLesen(selectedFile.getPath());
              
         //hier müsste der neue thread gerufen werden, der am besten die nachfolgenden methoden beinhaltet
              dcheck.checkFolders(datei);
              checkAll();
             
            
            }
          }
        });
      
      //bei Klick auf den Button wird die überprüfung gestartet
      btn_start.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent ae) {
              buttonAction();
          }
        });
      
      
      //löscht alle eingaben und erstellt ein neues Objekt vom dchecker, damit gespeicherte werte gelöscht werden.
      btn_clear.addActionListener(new ActionListener() {
          public void actionPerformed(ActionEvent ae) {
              dcheck.setErrortext("");
              dcheck.setAusgabe("");
              domain_eingabe.setText("");
              info.setText("");
             
          }
        });
      
      domain_eingabe.addKeyListener(new KeyListener() {
        //Überpfüft, ob die "enter"-taste gedürckt wurde und löst dadurch die überprüfung aus (mit fokus auf den button)
          public void keyTyped(KeyEvent e) {
             //hier passiert nix!
          }

          public void keyPressed(KeyEvent e) {
              //Enter-Taste gedrückt?? Test durchführen
              if(e.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {

                  buttonAction();
              }
              
          }

          public void keyReleased(KeyEvent e) {
              //hier passiert auch nix!
              
          }
      });


        allEingabe.setSize(900, 100); 
        domainEingabe.setLayout(new GridLayout(1,2,40,0));
        allAusgabe.setLayout(new FlowLayout());
        domainEingabe.add(domain_eingabe);
        domainEingabe.add(btn_start);
        domainEingabe.add(btn_clear);
        allEingabe.add(domainEingabe);
        cp.add(allEingabe, BorderLayout.NORTH); 
        //scroll = 
        scroll.setPreferredSize(new Dimension(990, 495));
        scroll.setMinimumSize(new Dimension(990, 495));
        allAusgabe.add(scroll);
        allAusgabe.setBackground(new Color(255, 255, 255));
        info.setEditable(false);
        
        cp.add(allAusgabe, BorderLayout.CENTER);
        
        this.setVisible(true);
    }//ende DCWin
    
    //veränderung des Styles fürs Fenster
    private void changeLaF(String button){
        String lookAndFeel="";
        String paket="com.sun.java.swing.plaf.";
        if(button.equals("Metal")){paket="javax.swing.plaf.";}
        String laf= button.toLowerCase();
        lookAndFeel = paket + laf + "." + button + "LookAndFeel" ;
       
        try {
            UIManager.setLookAndFeel(lookAndFeel);
            SwingUtilities.updateComponentTreeUI(this);
        }
        
        catch(Exception e) {
            
        }
     
    }
    /*Durchführung des Testlaufs und Auswertung, wieviele Zeilen/Domains eingelsen wurden*/
    private void checkAll(){
        
      
                dcheck.finalTest();
                String zwischenergebnis;
                //wurde keine Datei eingelesen entfällt die Anmerkung wieviele Domains gelesen wurden.
                if(dcheck.getFileLineCount()==0){zwischenergebnis = "";}
                else{zwischenergebnis="Es wurden: "+dcheck.getFileLineCount()+" Domain(s) eingelesen\n";}
                String ergebnis = zwischenergebnis+ "\n\n";      
                //ausgabe der ergebnisse im GUI und in der Konsole
                if(dcheck.getAusgabe().equals("")){dcheck.setAusgabe("Alle Ordner gesichert!");}
                ergebnis = zwischenergebnis+ "\n\n"+ dcheck.getAusgabe();      
                info.setText(dcheck.getSafety()+"\n"+ergebnis);
            


    	
    }
    
    /*Die Action, die passiert wennman auf den Button klickt oder die Enter-Taste drückt*/
    private void buttonAction(){
        /*Sollte die Eingabezeile nicht leer sein, werden die einzelnen Domains in das Array eintrag geschrieben und ausgewertet*/
        if(!domain_eingabe.getText().equals("")){
        String[]eintrag = domain_eingabe.getText().split(" ");
        dcheck.checkFolders(eintrag);
        
        checkAll();}
        //ist die Eingabezeile leer wird entsprechende Meldung ausgegeben
        else{JOptionPane.showMessageDialog(null, "Eine oder mehrere Domain/s angeben!", "Fehler bei Eingabe!!", JOptionPane.OK_OPTION);}
        
    }
    
    public void run(){
        
        checkAll();
    }
    
}


in zeilen 122 bis 124 stehen die methoden, die ich gerne in einem neuen thread haben möchte.

ich hab irgendwie das gefühl ich muss da noch was in die DChecker.java auslagern an logik
oder irgendeine neue klasse schreiben, kein plan.

hab bisher auch noch nie mit threads gearbeitet und egal was ich lese, immer hört sich des sooo einfach an, auch hier im theread die beiträge, das liest sich, als wär ich der totale obernoob und hätte die falsche ausbildung gewählt -.-
 

Marco13

Top Contributor
In einfachsten fall wäre das

VORHER
Code:
         //hier müsste der neue thread gerufen werden, der am besten die nachfolgenden methoden beinhaltet
              dcheck.checkFolders(datei);
              checkAll();

NACHHER:

Code:
         Thread t = new Thread(new Runnable()
         {
           public void run()
           {
              dcheck.checkFolders(datei);
              checkAll();
           }
         };
         t.start();


Musst nur ggf. aufpassen, wenn diese Methoden etwas machen, was irgendwie auf GUI-Komponenten zugreift. info.setText(...) ist noch OK, aber bei allem anderen ... sag bescheid...
 

Exceptionist

Aktives Mitglied
lol das hatte ich grad auch schon stehen, nur das t.start() fehlte

omg ich fühl mich grad wie montag früh um 6.. einfach augen zu machen umdrehen und wieder pennen -.-

danke!
 
S

SlaterB

Gast
die Aktion wird später vom Event-Thread ausgeführt,
das passiert jetzt auch schon (z.B. alle Aktionen eines ActionListeners)
und solange der Event-Thread damit beschäftigt ist, wird die GUI blockiert,

genau das soll nicht passieren, daher muss die Aktion in einem separaten Thread ausgeführt werden
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
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
G Swing JPasswordField AWT, Swing, JavaFX & SWT 12
L Swing Button Farbe ändern/wechseln AWT, Swing, JavaFX & SWT 2
C Swing AWT GUI Anfänger Aufgabe AWT, Swing, JavaFX & SWT 7
W Inject bei einem Swing Frontend AWT, Swing, JavaFX & SWT 8
L Kommunikation zwischen Klassen / Konstruktoren bei Swing AWT, Swing, JavaFX & SWT 9
M Feldvalidierung swing AWT, Swing, JavaFX & SWT 4
E Swing Componenten werden nach Änderung des display modes verzerrt dargestellt AWT, Swing, JavaFX & SWT 8
D [Swing] Anordnung von Komponenten mit GridLayout Manager AWT, Swing, JavaFX & SWT 13
O Zukunft von Swing und JavaFX ? AWT, Swing, JavaFX & SWT 3
S Swing Fenster State Machine AWT, Swing, JavaFX & SWT 1
T Swing Swing an Bildschirm anpassen AWT, Swing, JavaFX & SWT 3
S Swing Panel wird nicht neu gezeichnet AWT, Swing, JavaFX & SWT 3
M Swing Java Swing/AWT Combobox Bug AWT, Swing, JavaFX & SWT 3
M Swing GUI mittels erben sowie variabler Dateninhalt AWT, Swing, JavaFX & SWT 1
W Swing Multitouch mit Swing AWT, Swing, JavaFX & SWT 6
S Swing-Applikation die ein Numpad nachbildet samt Keybindings..? AWT, Swing, JavaFX & SWT 5
S Swing Java Swing AWT, Swing, JavaFX & SWT 6
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
J Swing oder JavaFX AWT, Swing, JavaFX & SWT 21
D Swing Anwendung ohne JPanel erstellen AWT, Swing, JavaFX & SWT 1
D SQL Statements mit Java Swing benutzen AWT, Swing, JavaFX & SWT 4
Damtonix BufferStrategy flackert (Swing) AWT, Swing, JavaFX & SWT 9
D DatePicker für Java Swing AWT, Swing, JavaFX & SWT 2
B JavaFX oder swing AWT, Swing, JavaFX & SWT 3
T Java Swing - kleines Rechteck unter dem cursor AWT, Swing, JavaFX & SWT 5
L 2D-Grafik Swing paint|paintComponent AWT, Swing, JavaFX & SWT 2
L Swing Größe automatisch anpassen AWT, Swing, JavaFX & SWT 14
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
Blender3D Meine Swing Anwendung läuft unter Windows 10 und Ubuntu aber nicht auf Windows 7 AWT, Swing, JavaFX & SWT 16
B Bar Plot in Swing JPanel AWT, Swing, JavaFX & SWT 0
D Swing in Kombination mit JGraphX und JGraphT AWT, Swing, JavaFX & SWT 0
F main-Funktion bei Swing AWT, Swing, JavaFX & SWT 4
S Java Swing Print() method AWT, Swing, JavaFX & SWT 4
S Java Swing auf Windows Phone AWT, Swing, JavaFX & SWT 6
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
S Manuelles Menu in Swing AWT, Swing, JavaFX & SWT 3
T Custom Window ohne Swing / AWT / FX..?! AWT, Swing, JavaFX & SWT 1
MaxG. Swing Swing Komponenten zur Laufzeit hinzufügen AWT, Swing, JavaFX & SWT 2
Java_RY Bin Ratlos bzgl Malen in Swing AWT, Swing, JavaFX & SWT 5
offi Swing Shuttle List AWT, Swing, JavaFX & SWT 9
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
D Swing Swing Objekte sehen im Entwurf anders aus als beim Ausführen AWT, Swing, JavaFX & SWT 3
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
javampir Swing repaint in JavaFX Anwendung AWT, Swing, JavaFX & SWT 3
K Mit JavaFX angefangen. Lohnt sich Swing? AWT, Swing, JavaFX & SWT 28
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
M Swing Swing-Widgets und paintComponent() AWT, Swing, JavaFX & SWT 2
B Swing WindowBuilde: Menu -> anderes Panel wechseln AWT, Swing, JavaFX & SWT 1
K eigener button in swing AWT, Swing, JavaFX & SWT 3
A JavaFX DatePicker in Swing beim Start nicht sichtbar AWT, Swing, JavaFX & SWT 2
windl Bufferstrategy in Swing nachstellen AWT, Swing, JavaFX & SWT 0
M Kamera in Java Swing einbinden AWT, Swing, JavaFX & SWT 4
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
N Swing Benötige Hilfe um ein Swing Canvas zu speichern AWT, Swing, JavaFX & SWT 4
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
RalleYTN Swing JavaFX VideoPlayer in Swing einbetten. Ich komm nicht an die Dimension des Videos! AWT, Swing, JavaFX & SWT 0
T swing läuft nur beding flüssig AWT, Swing, JavaFX & SWT 1
A Sonderzeichen bei Swing AWT, Swing, JavaFX & SWT 3
L DoubleBuffering unter Swing AWT, Swing, JavaFX & SWT 0
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
N JavaFX Umstieg von Swing auf Java FX AWT, Swing, JavaFX & SWT 6
J GUI Anfänger einfaches Program AWT, Swing, JavaFX & SWT AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Plugin oder eigenes Tool mit zB SWING AWT, Swing, JavaFX & SWT 2
Z Java-Swing : JComponent AWT, Swing, JavaFX & SWT 2
Z Swing Swing: Elemente werden doppel/verschoben gezeichnet, sind teils unsichtbar etc... AWT, Swing, JavaFX & SWT 10
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
T Swing Kompatibilitätsproblem zwischen Swing und JavaFX AWT, Swing, JavaFX & SWT 4
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
S (Swing)Vollbild anzeigen unter Linux/Mac AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben