Moin,
ich hab ne JTextPane und nen JTextField, die is so wie ne Konsole aufgebaut, dort will ich zb. eine passwort-abfrage machen, und das soll so gehn:
Text wird in die Konsole geschrieben, was der Benutzer machen soll, und dann gehts erst weiter wenn der Text für das Passwort geschrieben wurde.
Mein Problem liegt darin, das der Programm-ablauf einfach weiter läuft, obwohl er warten soll.
Form für die JTextPane und JTextField:
TextPaneManager:
So bald ich starte kommt das:
Er wartet also nicht.
ich hab ne JTextPane und nen JTextField, die is so wie ne Konsole aufgebaut, dort will ich zb. eine passwort-abfrage machen, und das soll so gehn:
Text wird in die Konsole geschrieben, was der Benutzer machen soll, und dann gehts erst weiter wenn der Text für das Passwort geschrieben wurde.
Mein Problem liegt darin, das der Programm-ablauf einfach weiter läuft, obwohl er warten soll.
Form für die JTextPane und JTextField:
Java:
public class LoadingForm extends JFrame {
TextPaneManager man;
public LoadingForm() {
[...]
man = new TextPaneManager(textPane_console);
input_console.addKeyListener(new InputListener());
input_console.requestFocus();
checkPassword();
}
private class InputListener implements KeyListener {
public void keyTyped(KeyEvent e) {
}
public void keyPressed(KeyEvent e) {
//Text wird in die Konsole geschrieben.
if(e.getKeyCode() == KeyEvent.VK_ENTER && !input_console.getText().isEmpty()) {
man.insertString(input_console.getText());
}
}
public void keyReleased(KeyEvent e) {
}
}
private void checkPassword() {
String pw = man.getString("Passwort für das Starten des Systems:");
// <---- Hier soller warten bis nen return value von getString kommt
if(pw.equals("123")) {
man.insertString("richtig");
} else {
man.insertString("falsch");
}
man.insertString("fertig");
}
}
TextPaneManager:
Java:
public class TextPaneManager {
public static final String BREAK = System.getProperty("line.separator");
private Document doc;
private int insertType = 0; // Wenn 0 normaler eintrag, wenn 1 wird der text eine antwort auf die frage sein, also das passwort
private String returnText = ""; // Das passwort
public TextPaneManager(JTextPane tP) {
doc = tP.getDocument();
tP.getDocument().addDocumentListener(new TextPaneListener());
}
public String getString(String text) {
try {
doc.insertString(doc.getLength(), text+BREAK, null); // Die frage posten
insertType = 1; // insertType auf 1 setzen
new Thread() {
@Override
public void run() {
boolean run = true;
while(run) { // so lange laufen bis der text gesendet wurde
if(!returnText.isEmpty()) {
run = false;
}
}
interrupt();
}
}.start();
} catch(BadLocationException ex) {
}
return returnText;
}
public void insertString(String text) {
try {
doc.insertString(doc.getLength(), text+BREAK, null);
} catch(BadLocationException ex) {
}
}
public class TextPaneListener implements DocumentListener {
public void insertUpdate(DocumentEvent e) {
if(insertType == 1) { // wenn insertType 1 ist, also wenn das pw gesendet wurde dann:
try {
returnText = e.getDocument().getText(e.getOffset(), e.getLength()); // das pw wurde eingegeben und wird zurück gegeben.
insertType = 0; // insertType wieder auf normal setzen
} catch(BadLocationException ex) {
}
returnText = "";
}
}
public void removeUpdate(DocumentEvent e) {
}
public void changedUpdate(DocumentEvent e) {
}
}
}
So bald ich starte kommt das:
Java:
Passwort für das Starten des Systems:
falsch
fertig
Er wartet also nicht.
Zuletzt bearbeitet: