Stop Button für Programm

GalaxyWarrior

Erfahrenes Mitglied
Hi, ich habe ein Programm geschrieben, welches eine "Anleitung" ausgibt, wie man bei den Türmen von Hanoi die Steine umlegen muss. Jetzt wollte ich einen Stop Button programmieren, welcher im Prinzip auch geht, nur man kann ihn nicht anklicken solange das Programm noch rechnet, hat einer ne Idee wie ich das mache? Mir wurde gesagt, das muss man mit Parallelprozessen machen, aber habe bisher nix gefunden was mir da weiterhilft, bzw wie ich das mache, weil davon hab ich keine Ahnung.
Gruß GalaxyWarrior
 
Danke illaX, das Schlagwort Thread war garnicht schlecht in der Google suche ^^.
Und auch danke Romsl für den Link. Werde das heute Mittag wenn ich daheim bin ma testen.
Gruß GalaxyWarrior
 
Hi, ich schaff das irgendwie net so wie das sein soll. Ich habe im Moment eine Ampelschaltung programmiert und wollte, dass man den ablauf stoppen kann. Habe dann eine neue Klasse gemacht die so aussieht:
Code:
import java.awt.*;
import java.awt.event.*;
import java.awt.Panel;

public class Ampelschaltung extends Thread{
  private Panel ampelSuedGelb = new Panel(null);
  private Panel ampelWestRot = new Panel(null);
  private Panel ampelNordGruen = new Panel(null);
  private Panel ampelOstGruen = new Panel(null);
  private Panel ampelSuedRot = new Panel(null);
  private Panel ampelSuedGruen = new Panel(null);
  private Panel ampelWestGruen = new Panel(null);
  private Panel ampelWestGelb = new Panel(null);
  private Panel ampelOstRot = new Panel(null);
  private Panel ampelOstGelb = new Panel(null);
  private Panel ampelNordGelb = new Panel(null);
  private Panel ampelNordRot = new Panel(null);
  private Panel ampelWest = new Panel(null);
  private Panel ampelOst = new Panel(null);
  private Panel ampelNord = new Panel(null);
  private Panel ampelSued = new Panel(null);

  public Ampelschaltung(){
    ampelNord.setBounds(264, 112, 41, 105);
    ampelNord.setBackground(Color.BLACK);
    add(ampelNord);

    ampelNordRot.setBounds(8, 72, 25, 25);
    ampelNordRot.setBackground(Color.RED);
    ampelNord.add(ampelNordRot);

    ampelNordGelb.setBounds(8, 40, 25, 25);
    ampelNordGelb.setBackground(Color.YELLOW);
    ampelNord.add(ampelNordGelb);

    ampelNordGruen.setBounds(8, 8, 25, 25);
    ampelNordGruen.setBackground(Color.GREEN);
    ampelNord.add(ampelNordGruen);




    ampelOst.setBounds(376, 176, 105, 41);
    ampelOst.setBackground(Color.BLACK);
    add(ampelOst);

    ampelOstRot.setBounds(8, 8, 25, 25);
    ampelOstRot.setBackground(Color.RED);
    ampelOst.add(ampelOstRot);

    ampelOstGelb.setBounds(40, 8, 25, 23);
    ampelOstGelb.setBackground(Color.YELLOW);
    ampelOst.add(ampelOstGelb);

    ampelOstGruen.setBounds(72, 8, 25, 25);
    ampelOstGruen.setBackground(Color.GREEN);
    ampelOst.add(ampelOstGruen);




    ampelSued.setBounds(376, 288, 41, 105);
    ampelSued.setBackground(Color.BLACK);
    add(ampelSued);

    ampelSuedRot.setBounds(8, 8, 25, 25);
    ampelSuedRot.setBackground(Color.RED);
    ampelSued.add(ampelSuedRot);

    ampelSuedGelb.setBounds(8, 40, 25, 25);
    ampelSuedGelb.setBackground(Color.YELLOW);
    ampelSued.add(ampelSuedGelb);

    ampelSuedGruen.setBounds(8, 72, 25, 25);
    ampelSuedGruen.setBackground(Color.GREEN);
    ampelSued.add(ampelSuedGruen);




    ampelWest.setBounds(200, 288, 105, 41);
    ampelWest.setBackground(Color.BLACK);
    add(ampelWest);

    ampelWestRot.setBounds(72, 8, 25, 25);
    ampelWestRot.setBackground(Color.RED);
    ampelWest.add(ampelWestRot);

    ampelWestGelb.setBounds(40, 8, 23, 23);
    ampelWestGelb.setBackground(Color.YELLOW);
    ampelWest.add(ampelWestGelb);

    ampelWestGruen.setBounds(8, 8, 25, 25);
    ampelWestGruen.setBackground(Color.GREEN);
    ampelWest.add(ampelWestGruen);


    ampelWestRot.setVisible(false);
    ampelSuedRot.setVisible(true);
    ampelOstRot.setVisible(false);
    ampelNordRot.setVisible(true);
    ampelSuedGelb.setVisible(true);
    ampelOstGelb.setVisible(true);
    ampelWestGelb.setVisible(true);
    ampelNordGelb.setVisible(true);
    ampelOstGruen.setVisible(false);
    ampelNordGruen.setVisible(false);
    ampelWestGruen.setVisible(false);
    ampelSuedGruen.setVisible(false);

    for(int x = 0; x < 2;x++){
      try{Thread.sleep(3000);}catch(Exception e){}
      ampelWestRot.setVisible(true);
      ampelSuedRot.setVisible(false);
      ampelOstRot.setVisible(true);
      ampelNordRot.setVisible(false);
      ampelSuedGelb.setVisible(false);
      ampelOstGelb.setVisible(false);
      ampelWestGelb.setVisible(false);
      ampelNordGelb.setVisible(false);
      ampelOstGruen.setVisible(false);
      ampelNordGruen.setVisible(true);
      ampelWestGruen.setVisible(false);
      ampelSuedGruen.setVisible(true);

      try{Thread.sleep(10000);}catch(Exception e){}
      ampelWestRot.setVisible(true);
      ampelSuedRot.setVisible(false);
      ampelOstRot.setVisible(true);
      ampelNordRot.setVisible(false);
      ampelSuedGelb.setVisible(true);
      ampelOstGelb.setVisible(true);
      ampelWestGelb.setVisible(true);
      ampelNordGelb.setVisible(true);
      ampelOstGruen.setVisible(false);
      ampelNordGruen.setVisible(false);
      ampelWestGruen.setVisible(false);
      ampelSuedGruen.setVisible(false);

      try{Thread.sleep(3000);}catch(Exception e){}
      ampelWestRot.setVisible(false);
      ampelSuedRot.setVisible(true);
      ampelOstRot.setVisible(false);
      ampelNordRot.setVisible(true);
      ampelSuedGelb.setVisible(false);
      ampelOstGelb.setVisible(false);
      ampelWestGelb.setVisible(false);
      ampelNordGelb.setVisible(false);
      ampelOstGruen.setVisible(true);
      ampelNordGruen.setVisible(false);
      ampelWestGruen.setVisible(true);
      ampelSuedGruen.setVisible(false);

      try{Thread.sleep(10000);}catch(Exception e){}
      ampelWestRot.setVisible(false);
      ampelSuedRot.setVisible(true);
      ampelOstRot.setVisible(false);
      ampelNordRot.setVisible(true);
      ampelSuedGelb.setVisible(true);
      ampelOstGelb.setVisible(true);
      ampelWestGelb.setVisible(true);
      ampelNordGelb.setVisible(true);
      ampelOstGruen.setVisible(false);
      ampelNordGruen.setVisible(false);
      ampelWestGruen.setVisible(false);
      ampelSuedGruen.setVisible(false);
    }
  }
}

und von der Hauptklasse mit new Ampelschaltung(); aufgerufen, aber er sagt nur
Code:
Ampelschaltung.java:63: cannot find symbol
symbol  : method add(java.awt.Panel)
location: class Ampelschaltung
    add(ampelSued);
    ^

Wie bekomme ich das hin, dass labels in Threads funktionieren? Hat einer ne Idee?

Gruß GalaxyWarrior
 
Hey,
Wenn ich das richtig sehe versuchst du die methode "add();" ohne Objektreferenz aufzurufen! Wenn du die Klasse Frame vererbst geht das, aber du vererbst diesmal Thread ;)
Du solltest dem Konstruktor einen Frame übergeben und dann mit frame.add(); deine Panels da hinzufügen...
mfg,
Tsa
 
HI, hat jemand ne Ahnung was :
Code:
Ampelschaltung.java:25: reference to Frame is ambiguous, both method Frame(java.awt.GraphicsConfiguration) in java.awt.Frame and method Frame(java.lang.String) in java.awt.Frame match
    f = new Frame(null);
bedeutet? Ich habe den Frame versucht mit Frame f = new Frame(null); bzw mit Frame f in der Variablenliste und f = new Frame(null) im Kunstruktor zu erstellen, aber beides bringt diesen Fehler.

Mit freundlichen Grüßen
GalaxyWarrior
 
Moin,
nun, offenbar gibt es zwei Frame-Konstruktoren, einen mit einem String und einen mit einem GraphicsContext als Übergabeparameter. Der Compiler kann bei Übergabe von null jedoch nicht unterscheiden, welcher von beiden ausgeführt werden soll.
 
Hi, danke für den Tip, jetzt gehts, leider net so wie ich dachte / hoffte ^^

Weil eigentlich wollte ich einen Button machen mit dem man den Ablauf des Programms stoppen kann, Jetzt öffnet er einen neuen Frame, aber den Button kann man trozdem erst drücken wenn das Prog durchgelaufen ist :-(
Hat jemand Rat?

Gruß GalaxyWarrior
 
Zurück