Thread funktioniert nicht

Jack159

Bekanntes Mitglied
Hintergrund:
Ich habe ein Schere Stein Papier Spiel (mit GUI) gecodet, welches nun auch funktioniert.
Beim klicken des Buttons wird das Spiel gestartet und in der TextArea werden so Sachen wie "Spieler nimmt Stein, PC nimmt Schere, Spieler gewinnt" angezeigt. Da diese anzeige, aber sofort erscheint, würde ich den Text in mehreren Zeitabständen ausgeben lassen, damit es ein wenig spannender wirkt.
Beispiel:
*Schere* (1sek Pause)
*Stein* (1sek Pause)
*Papier* (1sek Pause)
"Spieler nimmt Stein, PC nimmt Schere" (1sek Pause)
"Spieler gewinnt"
Das ganze müsste sich mit einem Thread realisieren lassen, indem man den Thread dann immer für 1 sek einschlafen lässt.

Hier das Spiel ohne Threads, wo der Text sofort erscheint. Die ganze Aktion spielt sich eigentlich in der ActionPerformed Methode des Buttons ab (Funktionierende Version)
Java:
import java.awt.BorderLayout;


public class Schere extends JFrame 
{

	private JPanel contentPane;
	private JScrollPane scrollPane;
	private JTextArea textArea;
	private JRadioButton SchereRadioButton;
	private JRadioButton SteinRadioButton;
	private JRadioButton PapierRadioButton;
	public String spielerAuswahl;
	public String computerAuswahl;
	public ArrayList<String> liste = new ArrayList<String>();
    
	
	
	

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		
	
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Schere frame = new Schere();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Schere() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 547, 429);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		scrollPane = new JScrollPane();
		scrollPane.setBounds(42, 28, 444, 221);
		contentPane.add(scrollPane);
		
		textArea = new JTextArea();
		textArea.setWrapStyleWord(true);
		textArea.setLineWrap(true);
		scrollPane.setViewportView(textArea);
		
		 SchereRadioButton = new JRadioButton("Schere");
		SchereRadioButton.setBounds(42, 256, 109, 23);
		contentPane.add(SchereRadioButton);
		
		 SteinRadioButton = new JRadioButton("Stein");
		SteinRadioButton.setBounds(42, 282, 109, 23);
		contentPane.add(SteinRadioButton);
		
		 PapierRadioButton = new JRadioButton("Papier");
		PapierRadioButton.setBounds(42, 308, 109, 23);
		contentPane.add(PapierRadioButton);
		
		ButtonGroup group = new ButtonGroup();
	    group.add(SchereRadioButton);
	    group.add(SteinRadioButton);
	    group.add(PapierRadioButton);
		
		JButton btnNewButton = new JButton("Los");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				if(SchereRadioButton.isSelected() | SteinRadioButton.isSelected() | PapierRadioButton.isSelected()) {
					
					textArea.append("Das Spiel beginnt!\n");
					
			
				liste.add("Schere");
				liste.add("Stein");
				liste.add("Papier");
				int zufallsZahl = (int) (Math.random()*3); 
				computerAuswahl = liste.get(zufallsZahl);
					
					
				
				
				if(SchereRadioButton.isSelected()) {
					
					spielerAuswahl = "Schere";
					textArea.append("Spieler nimmt Schere. Der Computer nimmt "+computerAuswahl+".\n");
					
				}
				
                if(SteinRadioButton.isSelected()) {
					
                	spielerAuswahl = "Stein";
					textArea.append("Spieler nimmt Stein. Der Computer nimmt "+computerAuswahl+".\n");
					
				}
                
                if(PapierRadioButton.isSelected()) {
					
                	spielerAuswahl = "Papier";
					textArea.append("Spieler nimmt Papier. Der Computer nimmt "+computerAuswahl+".\n");
					
				}
                
                

                if(spielerAuswahl==computerAuswahl)
                {
                  
                	textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Unentschieden!\n\n");

                }
                else
                {
                  if( (spielerAuswahl == "Schere" && computerAuswahl=="Papier") ||
                      (spielerAuswahl == "Stein" && computerAuswahl=="Schere")   ||
                      (spielerAuswahl == "Papier" && computerAuswahl=="Stein"))
                  {

                	  textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Spieler gewinnt das Spiel!\n\n");
                  }
                  else
                  {
                	  textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Computer gewinnt das Spiel!\n\n");
                  }
                }  
                
                
			}
				
			}
		});
		btnNewButton.setBounds(42, 360, 89, 23);
		contentPane.add(btnNewButton);
		
		
	    
		
	}
}

Hier meine aktuelle Thread-Version, welche nicht funktioniert. Erstmal soll das ganze Zeugs aus der Actionperformed Methode des Buttons, vom Thread aus ausgeführt werden:
Java:
import java.awt.BorderLayout;


public class Schere extends JFrame 
{

	public JPanel contentPane;
	public JScrollPane scrollPane;
	public JTextArea textArea;
	public JRadioButton SchereRadioButton;
	public JRadioButton SteinRadioButton;
	public JRadioButton PapierRadioButton;
	public String spielerAuswahl;
	public String computerAuswahl;
	public ArrayList<String> liste = new ArrayList<String>();
	public Runnable r1 = new SchereThread();
    
	
	
	

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		
	
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Schere frame = new Schere();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Schere() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 547, 429);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		scrollPane = new JScrollPane();
		scrollPane.setBounds(42, 28, 444, 221);
		contentPane.add(scrollPane);
		
		textArea = new JTextArea();
		textArea.setWrapStyleWord(true);
		textArea.setLineWrap(true);
		scrollPane.setViewportView(textArea);
		
		 SchereRadioButton = new JRadioButton("Schere");
		SchereRadioButton.setBounds(42, 256, 109, 23);
		contentPane.add(SchereRadioButton);
		
		 SteinRadioButton = new JRadioButton("Stein");
		SteinRadioButton.setBounds(42, 282, 109, 23);
		contentPane.add(SteinRadioButton);
		
		 PapierRadioButton = new JRadioButton("Papier");
		PapierRadioButton.setBounds(42, 308, 109, 23);
		contentPane.add(PapierRadioButton);
		
		ButtonGroup group = new ButtonGroup();
	    group.add(SchereRadioButton);
	    group.add(SteinRadioButton);
	    group.add(PapierRadioButton);
		
		JButton btnNewButton = new JButton("Los");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				new Thread(r1).start();
				
			}
		});
		btnNewButton.setBounds(42, 360, 89, 23);
		contentPane.add(btnNewButton);
		
		
	    
		
	}
}

Java:
public class SchereThread extends Schere implements Runnable {

	
	public void run() {
		
		if(SchereRadioButton.isSelected() | SteinRadioButton.isSelected() | PapierRadioButton.isSelected()) {
			
			textArea.append("Das Spiel beginnt!\n");
			
	
		liste.add("Schere");
		liste.add("Stein");
		liste.add("Papier");
		int zufallsZahl = (int) (Math.random()*3); 
		computerAuswahl = liste.get(zufallsZahl);
			
			
		
		
		if(SchereRadioButton.isSelected()) {
			
			spielerAuswahl = "Schere";
			textArea.append("Spieler nimmt Schere. Der Computer nimmt "+computerAuswahl+".\n");
			
		}
		
        if(SteinRadioButton.isSelected()) {
			
        	spielerAuswahl = "Stein";
			textArea.append("Spieler nimmt Stein. Der Computer nimmt "+computerAuswahl+".\n");
			
		}
        
        if(PapierRadioButton.isSelected()) {
			
        	spielerAuswahl = "Papier";
			textArea.append("Spieler nimmt Papier. Der Computer nimmt "+computerAuswahl+".\n");
			
		}
        
        

        if(spielerAuswahl==computerAuswahl)
        {
          
        	textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Unentschieden!\n\n");

        }
        else
        {
          if( (spielerAuswahl == "Schere" && computerAuswahl=="Papier") ||
              (spielerAuswahl == "Stein" && computerAuswahl=="Schere")   ||
              (spielerAuswahl == "Papier" && computerAuswahl=="Stein"))
          {

        	  textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Spieler gewinnt das Spiel!\n\n");
          }
          else
          {
        	  textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Computer gewinnt das Spiel!\n\n");
          }
        }  
        
        
	}
		
	}
	
	
}
 
S

SlaterB

Gast
SchereThread erbt von Schere, jedes dieser eigenständigen Runnable-Objekte greift auf seine eigenen Schere-Variablen zu,
das was du auf dem Bildschirm siehst ist aber ein einzelnes erstes separates Schere-Objekt, welches von der main-Methode erstellt wurde

-> SchereThread sollte nicht von Schere erben sondern ein (das einzige) Schere-Objekt im Konstruktor übergeben bekommen
 
Zuletzt bearbeitet von einem Moderator:

Jack159

Bekanntes Mitglied
SchereThread erbt von Schere, jedes dieser eigenständigen Runnable-Objekte greift auf seine eigenen Schere-Variablen zu,
das was du auf dem Bildschirm siehst ist aber ein einzelnes erstes separates Schere-Objekt, welches von der main-Methode erstellt wurde

-> SchereThread sollte nicht von Schere erben sondern ein (das einzige) Schere-Objekt im Konstruktor übergeben bekommen

Welches welches Schere-Objekt sollte SchereThread übergeben bekommen? Kann dir nicht ganz folgen.
Meinst du das Objekt "r1"?

@ Michael:
Ich möchte ja den die Textausgaben immer mit etwa 1sek Abstand ausgeben lassen, anstatt komplett alles sofort. Daher dachte ich, dass man das ganze mit einem Thread lösen könnte, da man einen Thread ja dann ständig für 1sek einfrieren lassen kann, bevor er den nächsten Text ausgibt.
 
S

SlaterB

Gast
nein, r1 ist ja der Thread,

sondern
> Schere frame = new Schere();
aus der main-Methode bzw., da der Thread ja aus Schere heraus gestartet wird dort einfach 'this' übergeben, das Schere-Objekt eben
 

Jack159

Bekanntes Mitglied
Ich habe jetzt nochmal ins Buch geschaut (Thema Threads). Ich habe es jetzt so gemacht wie es dort erklärt wird, allerdings klappt es immer noch nicht. Fast alles aus der SchereThread-Klasse ist auch rot unterstrichen.
Hier mal die überarbeitete Version, Zeile 16+17+84 wurden überarbeitet:

Java:
import java.awt.BorderLayout;


public class Schere extends JFrame 
{

	public JPanel contentPane;
	public JScrollPane scrollPane;
	public JTextArea textArea;
	public JRadioButton SchereRadioButton;
	public JRadioButton SteinRadioButton;
	public JRadioButton PapierRadioButton;
	public String spielerAuswahl;
	public String computerAuswahl;
	public ArrayList<String> liste = new ArrayList<String>();
	public Runnable threadJob = new SchereThread();
	public Thread meinThread = new Thread(threadJob);
    
	
	
	

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		
		
	
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Schere frame = new Schere();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Schere() {
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 547, 429);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		scrollPane = new JScrollPane();
		scrollPane.setBounds(42, 28, 444, 221);
		contentPane.add(scrollPane);
		
		textArea = new JTextArea();
		textArea.setWrapStyleWord(true);
		textArea.setLineWrap(true);
		scrollPane.setViewportView(textArea);
		
		 SchereRadioButton = new JRadioButton("Schere");
		SchereRadioButton.setBounds(42, 256, 109, 23);
		contentPane.add(SchereRadioButton);
		
		 SteinRadioButton = new JRadioButton("Stein");
		SteinRadioButton.setBounds(42, 282, 109, 23);
		contentPane.add(SteinRadioButton);
		
		 PapierRadioButton = new JRadioButton("Papier");
		PapierRadioButton.setBounds(42, 308, 109, 23);
		contentPane.add(PapierRadioButton);
		
		ButtonGroup group = new ButtonGroup();
	    group.add(SchereRadioButton);
	    group.add(SteinRadioButton);
	    group.add(PapierRadioButton);
		
		JButton btnNewButton = new JButton("Los");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				
				meinThread.start();
				
			}
		});
		btnNewButton.setBounds(42, 360, 89, 23);
		contentPane.add(btnNewButton);
		
		
	    
		
	}
}

In der Klasse hab ich nur das "extends Schere" rausgenommen.
Java:
public class SchereThread implements Runnable {

	
	public void run() {
		
		
		
		if(SchereRadioButton.isSelected() | SteinRadioButton.isSelected() | PapierRadioButton.isSelected()) {
			
			textArea.append("Das Spiel beginnt!\n");
			
	
		liste.add("Schere");
		liste.add("Stein");
		liste.add("Papier");
		int zufallsZahl = (int) (Math.random()*3); 
		computerAuswahl = liste.get(zufallsZahl);
			
			
		
		
		if(SchereRadioButton.isSelected()) {
			
			spielerAuswahl = "Schere";
			textArea.append("Spieler nimmt Schere. Der Computer nimmt "+computerAuswahl+".\n");
			
		}
		
        if(SteinRadioButton.isSelected()) {
			
        	spielerAuswahl = "Stein";
			textArea.append("Spieler nimmt Stein. Der Computer nimmt "+computerAuswahl+".\n");
			
		}
        
        if(PapierRadioButton.isSelected()) {
			
        	spielerAuswahl = "Papier";
			textArea.append("Spieler nimmt Papier. Der Computer nimmt "+computerAuswahl+".\n");
			
		}
        
        

        if(spielerAuswahl==computerAuswahl)
        {
          
        	textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Unentschieden!\n\n");

        }
        else
        {
          if( (spielerAuswahl == "Schere" && computerAuswahl=="Papier") ||
              (spielerAuswahl == "Stein" && computerAuswahl=="Schere")   ||
              (spielerAuswahl == "Papier" && computerAuswahl=="Stein"))
          {

        	  textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Spieler gewinnt das Spiel!\n\n");
          }
          else
          {
        	  textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Computer gewinnt das Spiel!\n\n");
          }
        }  
        
        
	}
		
	}
	
	
}
 
S

SlaterB

Gast
du hast den Sinn meiner Worte wohl nicht verstanden und das lässt jetzt auch ein bisschen an allgemeinen Programmierfähigkeiten zweifeln..

natürlich hast du jetzt im SchereThread Schere mit all seinen Attributen und vielleicht Methoden nicht mehr verfügbar,
natürlich ist der ganze GUI-Code nun erstmal kaputt,

aber das extends wegzunehmen war doch nur der kleinere Teil meines Vorschlags, du brauchst im Thread offensichtlich grundsätzlich immer noch den Zugriff auf Schere, deswegen sagte ich ja dass du Schere als Konstruktor-Parameter übergeben sollst
was ungesagt implizierte, dass alle GUI-Zugriffe dann auf dieses Schere-Objekt umzubiegen sind

alle Zugriffe zu ändern ist natürlich nicht so schön, es gibt noch zwei angenehmere Möglichkeiten die ich vorher nicht erwähnt habe:
1.
der Thread ruft einfach nur eine Methode von Schere auf, der ganze Code wandert wieder zurück nach Schere, steht nur nicht direkt im Listener sondern eine Methode die nebenläufig aufgerufen wird,
dann könnte die separate Thread-Klasse auch gleich ganz wegfallen, ein anonym deklarierter Thread reicht (nicht so wichtig wenn du das nicht kennst)

2.
ähnlich, aber doch bisschen anders:
Schere selber implementiert Runnable, und übernimmt die run-Methode exakt wie sie in SchereThread steht,
wird als Thread ausgeführt,
das ist möglich, so hattest du es am Anfang unbewußt quasi auch, von Vererbung über zwei Klassen hinweg abgesehen
 

twseitex

Mitglied
Hi,

nimm doch mal den Thread aus seiner Klasse und trage ihn direkt dort ein,
wo er gestartet wird,
per instanz=new Thread
{public void run()
{
... usw.
}

try
{instanz.start();}
catch (IllegalThreadStateException e)
{
.....
}


// +++++ prüfen ob Thread existiert
if(instanz!=null)
{
// +++++ Status holen
if( (instanz.isAlive())
&& (!instanz.isInterrupted())

....
}

instanz.interrupt(); // für stop

Dann hast du das sequentielle Gerüst. Wenn du dann feststellt, es geht ohne
Thread, dann ist das die bessere Wahl.

Ein Thread ist ein paralleler Programmteil, der im Prinzip autark mit eigenen
Ressourcen laufen soll. Daher muss der Thread auch wieder entfernt werden.

Wenn nicht nötig, dann nicht parallel arbeiten.

Cu
 

Jack159

Bekanntes Mitglied
2.
ähnlich, aber doch bisschen anders:
Schere selber implementiert Runnable, und übernimmt die run-Methode exakt wie sie in SchereThread steht,
wird als Thread ausgeführt,
das ist möglich, so hattest du es am Anfang unbewußt quasi auch, von Vererbung über zwei Klassen hinweg abgesehen

So hatte ich es auch vor, wusste nur nicht, dass man Threads auch mit nur 1 Klasse insgesamt erstellen kann. Daher die Vererbung mit der 2ten Klasse.
So funktioniert es nun erstmal wie gehabt, nur halt über den Thread bzw. der run() Methode.
Problem: Wie sage ich der run() Methode, dass sie schlafen soll? Ich habe ja kein Thread-Objekt...
Erstelle ich eins mit
Java:
Runnable threadJob = new Schere();
    Thread meinThread = new Thread(threadJob);
Gibts wieder ne Fehlermeldung. Sry aber ich bin absoluter Anfänger. Das hier ist mein eigentlich erstes "Projekt" (Andere coden sowas sicherlich in 5Min^^)

Aktueller Code (Funktioniert wie die alte Version. Ziel der verzögerten Textausgabe ist ja noch nicht erreicht)
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.ButtonGroup;
import javax.swing.JTextArea;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;

import javax.swing.ScrollPaneConstants;
import javax.swing.JRadioButton;


public class Schere extends JFrame implements Runnable 
{
 
    public JPanel contentPane;
    public JScrollPane scrollPane;
    public JTextArea textArea;
    public JRadioButton SchereRadioButton;
    public JRadioButton SteinRadioButton;
    public JRadioButton PapierRadioButton;
    public String spielerAuswahl;
    public String computerAuswahl;
    public ArrayList<String> liste = new ArrayList<String>();
    Runnable threadJob = new Schere();
    Thread meinThread = new Thread(threadJob);
    
    
    
    
    
    
 
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
    	
        
    
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Schere frame = new Schere();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
 
    /**
     * Create the frame.
     */
    
public void run() {
        
        
        
        if(SchereRadioButton.isSelected() | SteinRadioButton.isSelected() | PapierRadioButton.isSelected()) {
            
            textArea.append("Das Spiel beginnt!\n");
            
            
    
        liste.add("Schere");
        liste.add("Stein");
        liste.add("Papier");
        int zufallsZahl = (int) (Math.random()*3); 
        computerAuswahl = liste.get(zufallsZahl);
            
            
        
        
        if(SchereRadioButton.isSelected()) {
            
            spielerAuswahl = "Schere";
            textArea.append("Spieler nimmt Schere. Der Computer nimmt "+computerAuswahl+".\n");
            
        }
        
        if(SteinRadioButton.isSelected()) {
            
            spielerAuswahl = "Stein";
            textArea.append("Spieler nimmt Stein. Der Computer nimmt "+computerAuswahl+".\n");
            
        }
        
        if(PapierRadioButton.isSelected()) {
            
            spielerAuswahl = "Papier";
            textArea.append("Spieler nimmt Papier. Der Computer nimmt "+computerAuswahl+".\n");
            
        }
        
        
 
        if(spielerAuswahl==computerAuswahl)
        {
          
            textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Unentschieden!\n\n");
 
        }
        else
        {
          if( (spielerAuswahl == "Schere" && computerAuswahl=="Papier") ||
              (spielerAuswahl == "Stein" && computerAuswahl=="Schere")   ||
              (spielerAuswahl == "Papier" && computerAuswahl=="Stein"))
          {
 
              textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Spieler gewinnt das Spiel!\n\n");
          }
          else
          {
              textArea.append(spielerAuswahl + " gegen " + computerAuswahl+"! Computer gewinnt das Spiel!\n\n");
          }
        }  
        
        
    }
        
    }
    
    public Schere() {
        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 547, 429);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);
        
        scrollPane = new JScrollPane();
        scrollPane.setBounds(42, 28, 444, 221);
        contentPane.add(scrollPane);
        
        textArea = new JTextArea();
        textArea.setWrapStyleWord(true);
        textArea.setLineWrap(true);
        scrollPane.setViewportView(textArea);
        
         SchereRadioButton = new JRadioButton("Schere");
        SchereRadioButton.setBounds(42, 256, 109, 23);
        contentPane.add(SchereRadioButton);
        
         SteinRadioButton = new JRadioButton("Stein");
        SteinRadioButton.setBounds(42, 282, 109, 23);
        contentPane.add(SteinRadioButton);
        
         PapierRadioButton = new JRadioButton("Papier");
        PapierRadioButton.setBounds(42, 308, 109, 23);
        contentPane.add(PapierRadioButton);
        
        ButtonGroup group = new ButtonGroup();
        group.add(SchereRadioButton);
        group.add(SteinRadioButton);
        group.add(PapierRadioButton);
        
        JButton btnNewButton = new JButton("Los");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                
            	
                run();
                
                
                
                
            }
        });
        btnNewButton.setBounds(42, 360, 89, 23);
        contentPane.add(btnNewButton);
        
        
        
        
    }
}
 
S

SlaterB

Gast
keine neue Schere, das Grundprinzip sollte doch klar sein, run() direkt aufrufen geht natürlich auch nicht,
wobei ich gar nicht so genau verstehe was du darin machst,

Runnable threadJob =this;
Thread meinThread = new Thread(threadJob);

ist aber grundsäztlich möglich, da Schere nur ein Runnable ist kann es mehrfach verwendet werden, ein Runnable ist ja einfach nur irgendwas mit run() Methode und sonst nix,
wäre Schere ein Thread, dann könnte Schere nur einmal laufen, einen Thread kann man nicht wieder starten,

aber da ich langsam wirklich viel Standardwissen langweilig rezitiere antworte ich jetzt erstmal gar nicht mehr,
aus Buch lernen oder auf andere Antworten hoffen, falls nicht zufällig schon alles geklärt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P thread nimmt veränderte boolean nicht AWT, Swing, JavaFX & SWT 7
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
M Server/Client thread von GUI Trennen AWT, Swing, JavaFX & SWT 2
K JavaFx, Sound Aufnahme und Thread AWT, Swing, JavaFX & SWT 0
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
C Thread verwalten AWT, Swing, JavaFX & SWT 2
A Swing Exception in thread "AWT-EventQueue-0" AWT, Swing, JavaFX & SWT 1
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
ralfb1105 JavaFX MVC: Thread in Model Class mit Ausgabe in TextArea AWT, Swing, JavaFX & SWT 10
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
J Thread per Button starten AWT, Swing, JavaFX & SWT 10
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
T JavaFX Task / Thread / FXThread Komplikationen AWT, Swing, JavaFX & SWT 5
O Swing Event Dispatch Thread AWT, Swing, JavaFX & SWT 1
L JavaFX UI Thread block AWT, Swing, JavaFX & SWT 13
X Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 AWT, Swing, JavaFX & SWT 6
sandaime Swing Thread für CMD auslesen AWT, Swing, JavaFX & SWT 16
E JavaFX JavaFX Application in Thread ausführen AWT, Swing, JavaFX & SWT 1
D JavaFX UI-Thread und DB-Thread trennen um z.B. Ladebalken anzuzeigen AWT, Swing, JavaFX & SWT 15
T JavaFX Controller im extra Thread AWT, Swing, JavaFX & SWT 0
T Swing 2 Thread.sleep parallel laufen lassen AWT, Swing, JavaFX & SWT 4
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
E JavaFX Stage.show() in ursprünglichem Thread starten AWT, Swing, JavaFX & SWT 7
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
T Swing Button bleibt grau [=> UI hat sich aufgehängt, Aufgabe in Thread auslagern] AWT, Swing, JavaFX & SWT 3
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q GUI außerhalb GUI-Thread updaten - GUI friert ein AWT, Swing, JavaFX & SWT 18
C Thread in Klassen starten AWT, Swing, JavaFX & SWT 4
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
K JavaFX Tableview mit fxml ohne Aktualiserung trotz Thread AWT, Swing, JavaFX & SWT 13
K Event Handling 2 Buttons und Thread stop AWT, Swing, JavaFX & SWT 3
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
J Applet Paralleles Thread Handling AWT, Swing, JavaFX & SWT 3
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
T Java Swing Main GUI Thread AWT, Swing, JavaFX & SWT 3
C Event Handling Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException AWT, Swing, JavaFX & SWT 43
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
V Nullpointerexception (etwas mit thread und jframe) AWT, Swing, JavaFX & SWT 3
P Problem Thread.sleep() und JProgressBar AWT, Swing, JavaFX & SWT 7
S SWT GUI-Thread AWT, Swing, JavaFX & SWT 11
A Thread und sleep(1000); AWT, Swing, JavaFX & SWT 7
B Swing Thread+Animation AWT, Swing, JavaFX & SWT 7
S Timer oder Thread.sleep AWT, Swing, JavaFX & SWT 3
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
B Über SWT Button Thread beenden AWT, Swing, JavaFX & SWT 2
C SWT Gui Thread hängt sich auf AWT, Swing, JavaFX & SWT 3
lumo SWT Exception in thread "main" org.eclipse.swt.SWTError: No more handles AWT, Swing, JavaFX & SWT 3
Luk10 Swing Problem mit Zeichen-Thread AWT, Swing, JavaFX & SWT 8
G 2D-Grafik Von Thread aus Zeichnen AWT, Swing, JavaFX & SWT 5
U Swing JLabel bewegen mittels Thread AWT, Swing, JavaFX & SWT 3
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
R JTable und Thread AWT, Swing, JavaFX & SWT 4
K Thread.sleep in GUI AWT, Swing, JavaFX & SWT 4
D JPanel mit Thread in JPanel AWT, Swing, JavaFX & SWT 4
F Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null AWT, Swing, JavaFX & SWT 5
P Teil einer Swing GUI in eigenem Thread AWT, Swing, JavaFX & SWT 4
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
O JTree/TreeModel/DefaultMutableTreeNodes thread safe machen AWT, Swing, JavaFX & SWT 3
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
F SWT table refresh per Thread AWT, Swing, JavaFX & SWT 2
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
J AWT Artefakte bei AWT-Rendering durch parallelen Thread AWT, Swing, JavaFX & SWT 4
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
Burny91 Swing Thread mit wait() und notify() steuern AWT, Swing, JavaFX & SWT 22
N SWT - über Thread Composite erstellen und Anhängen AWT, Swing, JavaFX & SWT 6
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8
F Merkwürdiges Verhalten zeichnen sperater Thread AWT, Swing, JavaFX & SWT 13
B Swing Swing und Thread.sleep() AWT, Swing, JavaFX & SWT 6
N Exception Behandlung mit setDefaultUncaughtExceptionHandler, insbesondere im EventDispatcher Thread AWT, Swing, JavaFX & SWT 4
Q Neuer Thread zum Öffnen AWT, Swing, JavaFX & SWT 2
P Swing GUI im Thread? AWT, Swing, JavaFX & SWT 5
T GUI JFrame - neuer Thread AWT, Swing, JavaFX & SWT 2
data89 Was mache ich mit "Dispatched Event Thread"/Substance falsch? AWT, Swing, JavaFX & SWT 4
0x7F800000 Allg. Frage zum ev. dispatch thread, wie korrekt auf reaktion der Listener warten? AWT, Swing, JavaFX & SWT 4
S Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 7
T thread.sleep Sprung Problem AWT, Swing, JavaFX & SWT 24
N Server mit Thread und Statusbox AWT, Swing, JavaFX & SWT 3
S Objektverhalten in einen Thread legen AWT, Swing, JavaFX & SWT 4
G JProgressBar actionPerformedMethode und SwingUI thread AWT, Swing, JavaFX & SWT 36
E Komponenten in Event Dispatch Thread erzeugen? AWT, Swing, JavaFX & SWT 4
J Thread in GUI einbauen AWT, Swing, JavaFX & SWT 2
Lony AbstractTableModel Exception in thread "AWT-EventQueue- AWT, Swing, JavaFX & SWT 3
A Ticker als Thread AWT, Swing, JavaFX & SWT 3
G Auf Ergebnis vom Thread warten AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben