jimbooo
Goto Top

Java - GUI mit zwei Buttons die parallel, in separaten Threads laufen

Hallo Community,

gleich vorweg, ich bin kein Held bei der Java Programmierung.

Ich versuche momentan das folgende Problem zu lösen:
Es soll eine GUI mit zwei oder mehr Buttons erstellt werden, jeder Button soll eine Aktion (z.B. Abfrage welches Betriebssystem verwendet wird) ausführen, die Ausgabe soll in der GUI ausgegeben werden. Da jede der Abfragen die ich machen möchte jeweils mehrer Sekunden dauert sollen diese parallel erfolgen werden.

Beispiel 1:
Beim Klick auf Button 1 soll die erste Abfrage erfolgen, beim Klick auf Button 2 die zweite, beide sollen ihre Ausgabe in die vorgebenden Felder, in der GUI ausgeben.

Beispiel 2:
Beim Klick auf Button 1 sollen beide Abfragen gleichzeitig ausgeführt werden (nicht nacheinander).

Normalerweise würde ich euch meinen Beispiel-Code zur Verfügung stellen aber ich vermute mal das ich dabei schon falsch angesetzt habe (z.B. lässt sich die Größe meiner GUI zur Laufzeit mehr nicht ändern face-confused).
Daher würde ich euch bitte mir einen korrekten / sauberen Code als Beispiel zur Verfügung zu stellen.

Evlt. hat ja jemand noch etwas derartiges aus seiner eigenen Anfangszeit noch auf der Platte liegen.


PS: Windows 7, Eclipse kepler service release 1

Content-Key: 284240

Url: https://administrator.de/contentid/284240

Printed on: April 23, 2024 at 15:04 o'clock

Member: maretz
maretz Sep 30, 2015 at 15:33:59 (UTC)
Goto Top
Moin,

ganz ehrlich - klar bau ich dir den Code... gegen Einwurf kleiner Münzen kann man über alles reden! Entweder stellst du deinen Kram hier rein und man kann es verbessern oder du fragst halt direkt ob dir das jemand baut...

Zum Thema: 2 Dinge "Gleichzeitig" ist unmöglich - aber das was du möchtest wären vermutlich 2 parallele Threads, da findest du genug Optionen (z.B. Java ist auch eine Insel)
Mitglied: 122990
122990 Oct 01, 2015 updated at 08:32:40 (UTC)
Goto Top
Man muss es nur nachmachen...lernen und verstehen ist besser als copy n' paste
http://www.tutorialspoint.com/java/java_multithreading.htm

Gruß grexit
Member: Jimbooo
Jimbooo Oct 04, 2015 at 07:53:22 (UTC)
Goto Top
Hallo Ihr beiden,

erstmal danke für eure Antworten.

Hier mal ein funktionierender Beispiel Code von dem was ich gerne hätte:

package multithread;
 
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
 
public class RandomGetDataFromFileIO extends JFrame {
 
      private static final long serialVersionUID = 1L;
      private Thread th;
      private JButton btnStart;
      private JButton btnStop;
      private JTextField tfn;
      private JTextArea tfa;
 
      public void initGUI() {
            JPanel p = new JPanel();
            p.setBorder(new EmptyBorder(5, 5, 5, 5));
            setContentPane(p);
            p.setLayout(null);
            btnStart = new JButton("Start");  
            btnStart.setBounds(50, 30, 80, 30);
            p.add(btnStart);
            btnStart.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                        getDataFromFile();
                        btnStart.setEnabled(false);
                        btnStop.setEnabled(true);
                  }
            });
            btnStop = new JButton("Stop");  
            btnStop.setBounds(150, 30, 80, 30);
            p.add(btnStop);
            btnStop.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                        tfa.append(tfn.getText() + "\n");  
                  }
            });
            btnStop.setEnabled(false);
            tfn = new JTextField();
            tfn.setBounds(50, 80, 200, 20);
            p.add(tfn);
            setSize(300, 300);
            setVisible(true);
            tfa = new JTextArea();
            JScrollPane s = new JScrollPane();
            s.setBounds(50, 120, 200, 100);
            s.setViewportView(tfa);
            p.add(s);
      }
 
      public RandomGetDataFromFileIO() {
            initGUI();
      }
 
      public void getDataFromFile() {
            th = new Thread(new Runnable() {
                  public void run() {
                        BufferedReader in;
                        String data = "\n", l;  
                        try {
                             in = new BufferedReader(new FileReader("test1.txt"));  
                             while (true) {
                                   while ((l = in.readLine()) != null) {
                                         data += l;
                                   }
                                   StringTokenizer t = new StringTokenizer(data, "&");  
                                   if (t.hasMoreTokens() == false) {
                                         in = new BufferedReader(new FileReader("test.txt"));  
                                   }
                                   while (t.hasMoreTokens()) {
                                         tfn.setText(t.nextToken());
                                         Thread.sleep(70);
                                   }
                             }
                        } catch (Exception e) {
                             e.printStackTrace();
                        }
                  }
            });
            th.start();
      }
 
      public static void main(String args) {
            new RandomGetDataFromFileIO();
      }
}

Inhalt der "test1.txt" Datei:
Hallo&dies&ist&ein&Beispiel&Skript&das&lediglich&der&Demonstration&dient

ACHTUNG: Die Beenden Funktion des Skripte ist in diesem Beispiel nicht implementiert face-wink

Im Grunde wollte ich nur wissen wie guter Code mit den angegebenen Funktionen auszusehen hat.
Er soll halt gut lesbar, leicht erweiterbar sein.
Bei den Codes der GUI Builder hat man halt oft Probleme anschließend noch etwas zu erweitern, zu ändern.

Ich warte nun noch etwas ob jemand antwortet und stelle die Frage dann auf "Gelöst".

@maretz mehr als 5€ würde ich für so einen mini Schnipsel nicht ausgeben wollen...und dass die Abfragen in Threads abgearbeitet werden sollen steht im Titel :-P

@122990 ein Verweiß auf eine englisch sprachige Anleitung ist sicher gut gemeint aber das macht das lernen nicht gerade einfacher...
Schon klar das es auch deutsche Lektüre zum Thema Java Programierung gibt aber ich hatte halt immer nur etwas zu GUI ODER Threads gefunden und bin mir daher nicht sicher ob der Aufbau so korrekt ist.
Mitglied: 122990
122990 Oct 04, 2015 updated at 10:56:31 (UTC)
Goto Top
Sorry aber den Artikel kann sogar mein 10 jähriger Sohn lesen und mir erklären .... Wird ja schön an zwei Beispielen dort festgemacht. Übersetzer gibt es heute wie Sand am Mehr ein bisschen sollte man sich schon auf die Hinterbeine setzen und es lesen, alles andere ist Faulheit, sorry.

Aber selbst auf Deutsch gibts genug Futter zum lernen: