Halli Hallo,
ich programmiere derzeit eine "Suchmaschine", welche mithilfe einer While-Schleife überprüfen soll, ob die Buchstaben, welche ich in ein TextField eintippe, mit einem "Random String", welchen ich mit einer zufälligen Reihenfolge an Buchstaben des Alphabets auf die länge des Textes im TextField fülle, übereinstimmen. Das passiert dann natürlich sehr oft und sehr schnell. Ich möchte mir den "RandomString" in der GUI anzeigen lassen, was ich mithilfe eines Services machen lasse.
Die Überprüfung, ob TextField.getText() = "RandomString" passiert hier:
und mein Service sieht so aus:
Den Service steuer ich mit service.restart(); und service.cancel(); in jeweils einem Start- und Stop-Button.
Das Problem ist, dass sich das Interface aufhängt und auch nicht die System Printlines in der Konsole anzeigt. Sobald das Wort jedoch gefunden wurde, werden die Printlines angezeigt. Meine Vermutung ist, dass es an der While-Schleife liegt. Mit einer If-Abfrage hängt sich da nämlich nichts auf, jedoch wird nur einmal Abgefragt.
Ich bitte höflichst um Hilfestellung und Lösungsvorschläge, wie ich das evtl. sogar besser hinbekommen könnte.
Falls ihr Fragen habt oder ich etwas vergessen haben sollte, lasst euch in den Comments aus.
Vielen Dank im Voraus.
ich programmiere derzeit eine "Suchmaschine", welche mithilfe einer While-Schleife überprüfen soll, ob die Buchstaben, welche ich in ein TextField eintippe, mit einem "Random String", welchen ich mit einer zufälligen Reihenfolge an Buchstaben des Alphabets auf die länge des Textes im TextField fülle, übereinstimmen. Das passiert dann natürlich sehr oft und sehr schnell. Ich möchte mir den "RandomString" in der GUI anzeigen lassen, was ich mithilfe eines Services machen lasse.
Die Überprüfung, ob TextField.getText() = "RandomString" passiert hier:
Java:
label.textProperty().addListener(new ChangeListener<String>()
{
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue)
{
if(inputField.getText().equals(label.getText()))
{
winLabel.setText("ERFOLG");
System.out.println("ERFOLG");
Platform.runLater(() -> pb.setProgress(1));
}
}
});
und mein Service sieht so aus:
Java:
ScheduledService<Integer> service = new ScheduledService<Integer>()
{
@Override
protected Task<Integer> createTask()
{
return new Task<Integer>()
{
@Override
protected Integer call() throws Exception
{
Platform.runLater(() ->
{
System.out.println("Service läuft...");
System.out.println("Having: " + label.getText() +
" | Looking for: " + inputField.getText() +
" | inputField length: " + inputField.getLength() +
" | meineZahl length: " + meineZahl +
" | getMeineZahl length: " + getMeineZahl());
meineZahl = inputField.getLength();
while(!winLabel.getText().equals("ERFOLG"))
{
label.setText(das_affenprojekt_experimentieren.RandomTextausgabe());
if(winLabel.getText().equals("ERFOLG"))
{
break;
}
}
});
return 0;
}
};
}
};
//service.setDelay(Duration.seconds(1));
service.setPeriod(Duration.millis(speed));
Das Problem ist, dass sich das Interface aufhängt und auch nicht die System Printlines in der Konsole anzeigt. Sobald das Wort jedoch gefunden wurde, werden die Printlines angezeigt. Meine Vermutung ist, dass es an der While-Schleife liegt. Mit einer If-Abfrage hängt sich da nämlich nichts auf, jedoch wird nur einmal Abgefragt.
Ich bitte höflichst um Hilfestellung und Lösungsvorschläge, wie ich das evtl. sogar besser hinbekommen könnte.
Falls ihr Fragen habt oder ich etwas vergessen haben sollte, lasst euch in den Comments aus.
Vielen Dank im Voraus.
Zuletzt bearbeitet: