Programmunterbrechung und warten auf Benutzereingabe

Status
Nicht offen für weitere Antworten.

atwork

Mitglied
Hallo!

Folgender Sachverhalt:

Ein Client überprüft via RMI diverse Daten - das ganze findet in einer Methode statt. Wen jetzt ein spezielles Datum einen definierten Wert hat, soll die Überprüfung angehalten werden und ein neues Fenster (Fenster A) öffnet sich (neue Klasse), dass eine Eingabe erwartet. Erst wenn der Benutzer mit Klick auf OK beendet hat, soll die Überprüfung in der ursprünglichen Klasse fortgesetzt werden. Am Ende erscheint ein weiteres Fenster (Fenster B), in dem diverse Daten zur Überprüfung angezeigt werden.


Nachfolgende Lösungsansätze scheiterten:

1. Fenster A als JFrame: Fenster A erscheint als graue Fläche, wird jedoch erst nach Erscheinen von Fenster B komplett aufgebaut - d.h. die Überprüfugn geht im Hintergrund weiter.

2. Fenster A als JDialog: Fenster A erscheint komplett, Benutzer kann eine Eingabe machen, nachdem jedoch OK geklickt wurde, verschwindet das Fenster für den Bruchteil einer Sekunde, erscheint wieder so wie es verlassen wurde und weitere Klicks auf OK bewirken nichts. Erst nachdem man das Fenste rmit ALT-F4 (oder Klicken auf das Kreuz) beendet hat wird im Programm (korrekt) fortgefahren.

3. Fenster A in neuem Thread: Der ganez Aufruf von Fenster A wird in einen Thread verpackt, auf den dann mit join() gewartet wird. Gleiches Verhalten wie unter 1. Anscheinend wartet run() hier nicht auf den ActionListener udn beendet sich nach dem Aufbau des Fensters.


Weitere Lösungsvorschläge:
Da ich hier nun mit meinem Lateina m Ende bin, weiss vielleicht jemand anderes eine Lösung für dieses Problem, oder hat selbst so etwas schon einmal implementiert. Ich wäre für eine schnelle Lösung dankbar...

Vielen Dank

Gruss,
atwork
 
Ähhh ich hoffe ich habe richtig Verstanden was du willst. Du hast eine Methode die in 3 Schritten ablaufen soll.


Also dann würde ich persöhnlic die Methode in 3 Teile Splitten und sie über das Button ActioEvent nach jeder Benutzereingabe ablaufen lassen.

Code:
public void MEGAMETHODE ()
{
SUPERSCHRITT1;
SUPPERSCHRITTTTT2;
ULTRASCHRITT;
}

zu....

public void Superschritt()
{
    kill_something();
}

public void Superschritt2()
{
    kill_something();
}

public void Superschritt3()
{
    kill_something();
}

actionperformed(ActionEvent e)
{

if (e.getSource().equals(1.malOKButton))
{
    Superschritt();
}
if(e.getSource().equals(2.malOKButton))
{
    Superschritt2();
}


usw.
 
Ich weiss jetzt zwar nicht so ganz, was du meinst, aber vielleicht nochmal zum Verständnis:

Während da auf Client-Seite in einer Methode verscheidene Remotechekcs gemacht werden, soll bei einem Check bei bestimmten Werten dieses Fenster hcohkommen, wo der User etwas eingeben muss.

Problem ist, dass sich entweder das Fenster nicht richtig aufbaut, bevor die ganzen Remotchecks abgelaufen sind (und dann ist es zu spät, noch etwas einzugeben), oder das fenster wird nicht richtig geschlossen (als JDialog) - nach einmaligem Klick auf OK sollte das Fenster wieder verschwinden und die eigentlichen RemoteChecks an der Stelle der Unterbrechung fortgeführt werden. Das tut es aber in diesem Fall nicht, sondern verschwindet nru kurz udn erscheint dann samt Eingabe wieder und jeder weiter Klick auf OK führt zu nichts (das Programm wird auch nicht weiter fortgeführt) - erst mit dem Schliessen des fensters (also ALT+F4 oder eben X) geht die Verarbeitung weiter...

Um das ganze mal anschaulich zu machen, heir der code aus dem ActionListener...


Code:
	public void actionPerformed(ActionEvent ae) {
		if (ae.getActionCommand().equals("OK")) {
			jd.setVisible(false);
			log.methods("button OK pressed");
			buttonOK.removeActionListener(this);
			log.methods("security label is " + secLabel.getText());
			onlinerequest.client.Client.setLabel(secLabel.getText().toUpperCase());
			log.methods("nach der übergabe");
			jd.dispose();
		}
	}

Wobei jd das JDialog-Fenster ist...
 
Ok das heisst das aufsplitten in mehrere Methoden ist nicht drinn.
Ich überlege gerade ob ein Thread mit einem Observer das nicht regeln kann.
Der Observer meldet dann wenn eines der nötigen Kriterien für eine Eingabe da ist das das es was gibt und das MainProg bzw. der MainThread reagiert darauf. Solange wie die eingabe kommt solltest du den Thread dann schlafenlegen.

Geht das jetzt eher in die Richtung deines Problems?
 
Ja...das ist schon eher die Richtung - Problem ist halt, dass ich mich mti Threads nciht wirklich auskenne 🙁(

Die Sache mti dem JDialog funktioniert ja eigentlich fast (nur dass es eben nciht weiter geht)...aber wenn es da einen Thread-Experten gibt, der mri da helfen kann...
 
Das Thema hat sich zur Freude aller erledigt!

Nach dem Entfernen der Zeile jd.show() hat sich das ganze so verhalten, wie es sich verhalten sollte... :?

Danke aber trotzdem, dass sich jemand dem Problem angenommen hat...
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben