J
java2000
Gast
Hallo zusammen,
ich habe folgendes Problem:
Nach dem Programmstart soll ein JButton auftauchen, z.B: "GO".
Wenn man drauf klickt, startet eine grosse Berechnung, die sehr lange dauert. Zusätzlich soll ein neuer Button auftauchen, z.B: STOP.
Wenn man nun auf STOP klickt, soll die Berechnung stoppen, mit println das Resultat ausgegebenw werden, STOP verschwinden und wieder GO den Fokus erhalten, um die Berechnung wieder von vorne starten zu können. STOP soll wirklich weg sein und keine Ressourcen mehr benötigen.
Leider schaffe ich es nicht, dies programmtechnisch schlau zu realisieren. Ich habe es nur soweit gebracht, dass nach jedem Klick auf einen der Button der andere neu erzeugt wird, das heisst bei jedem Klickt kommt ein weiterer Swing dazu und sie werden erst beendet, wenn ich das gesamte Programm schliesse.
Als ich es anders gemacht habe, indem ich die Berechnung als parallelen Thread habe laufen lassen, konnte ich diesen Thread nur ein einziges Mal laufen lassen, danach kam beim Klick auf GO nur die IllegalThreadStateException.
Wahrscheinlich wäre es am sinnvollsten, GO würde die Methode Berechnung starten und STOP würde die Variable bool auf false setzen, damit Berechnung stoppt, das Resultat ausgibt, den STOP-Button beendet und mit GO wieder gestartet werden könnte.
Ich habe gehofft, folgendes Prinzip würde funktionieren:
Leider bleibt der Button STOP leer, man kann nicht drauf klicken, folglich nicht bool auf false setzen und dadurch nicht die Berechnung beenden
Wenn mit jemand helfen könnte, wäre ich sehr dankbar.
Gruss
Martin
ich habe folgendes Problem:
Nach dem Programmstart soll ein JButton auftauchen, z.B: "GO".
Wenn man drauf klickt, startet eine grosse Berechnung, die sehr lange dauert. Zusätzlich soll ein neuer Button auftauchen, z.B: STOP.
Wenn man nun auf STOP klickt, soll die Berechnung stoppen, mit println das Resultat ausgegebenw werden, STOP verschwinden und wieder GO den Fokus erhalten, um die Berechnung wieder von vorne starten zu können. STOP soll wirklich weg sein und keine Ressourcen mehr benötigen.
Leider schaffe ich es nicht, dies programmtechnisch schlau zu realisieren. Ich habe es nur soweit gebracht, dass nach jedem Klick auf einen der Button der andere neu erzeugt wird, das heisst bei jedem Klickt kommt ein weiterer Swing dazu und sie werden erst beendet, wenn ich das gesamte Programm schliesse.
Als ich es anders gemacht habe, indem ich die Berechnung als parallelen Thread habe laufen lassen, konnte ich diesen Thread nur ein einziges Mal laufen lassen, danach kam beim Klick auf GO nur die IllegalThreadStateException.
Wahrscheinlich wäre es am sinnvollsten, GO würde die Methode Berechnung starten und STOP würde die Variable bool auf false setzen, damit Berechnung stoppt, das Resultat ausgibt, den STOP-Button beendet und mit GO wieder gestartet werden könnte.
Ich habe gehofft, folgendes Prinzip würde funktionieren:
Code:
import javax.swing.*;
import java.text.*;
import java.awt.*;
import java.awt.event.*;
public class myClass
extends Thread
{
public static boolean bool; // wenn false ==> Berechnung stopt
public static void main(String[] args)
{
GO frame = new GO(); // GO - Button wird erstellt
frame.setLocation(400,300);
frame.setSize(100,100);
frame.setVisible(true);
}
public void run() //Berechnung
{
while(bool) { /*Berechnung*/ }
System.out.println("Resultate");
}
}
class GO
extends JFrame
implements ActionListener
{
public GO()
{
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
JButton btn = new JButton("GO");
btn.addActionListener(this);
add(btn);
}
public void actionPerformed(ActionEvent e)
{
STOP frame = new STOP(); // STOP - Button wird erstellt
frame.setLocation(550,300);
frame.setSize(100,100);
frame.setVisible(true);
myClass.bool = true;
Thread thrd = new Thread(new myClass());
thrd.run();
}
}
class STOP
extends JFrame
implements ActionListener
{
public STOP()
{
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
JButton btn = new JButton("STOP");
btn.addActionListener(this);
add(btn);
}
public void actionPerformed(ActionEvent e)
{
myClass.bool = false; // stopt die Berechnung.
// jetzt müsste noch der STOP-Button gelöscht werden
}
}
Leider bleibt der Button STOP leer, man kann nicht drauf klicken, folglich nicht bool auf false setzen und dadurch nicht die Berechnung beenden
Wenn mit jemand helfen könnte, wäre ich sehr dankbar.
Gruss
Martin