Hallo,
ich habe jetzt eine Klasse geschrieben, welche aus der Konsole einen Pin einließt, der Pin hat immer 6 Stellen.
Wenn man zwischen 2 Pineingaben länger als 5s wartet, wird der Buffer sb gelöscht.
Meine Frage wäre jetzt ob wer Fehler bzw. Optimierungen sieht (außer das ich statt den chars 0-9 auch default nehmen könnte)
ich habe jetzt eine Klasse geschrieben, welche aus der Konsole einen Pin einließt, der Pin hat immer 6 Stellen.
Wenn man zwischen 2 Pineingaben länger als 5s wartet, wird der Buffer sb gelöscht.
Meine Frage wäre jetzt ob wer Fehler bzw. Optimierungen sieht (außer das ich statt den chars 0-9 auch default nehmen könnte)
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
KeyThread kt;
public Main() throws IOException {
kt = new KeyThread();
kt.setState(false);
kt.setWait(5000);
kt.start();
final InputStreamReader isr = new InputStreamReader(System.in);
final BufferedReader br = new BufferedReader(isr);
String s = "";
while((s = br.readLine()) != null) {
handlePinpadKey(s.charAt(0));
}
}
Thread th = null;
final StringBuffer sb = new StringBuffer();
private void handlePinpadKey(final char key) {
switch(key) {
case 'c':
case 'e':
kt.setState(true);
sb.delete(0, sb.length());
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
kt.setState(false);
if(sb.length() < 5) {
sb.append(key);
kt.setState(true);
kt.setWait(5000);
}
else {
sb.append(key);
System.out.println("Pin else: " + sb);
sb.delete(0, sb.length());
}
break;
default:
System.out.println(key + " nicht gültig");
}
}
private void deleteKeys() {
sb.delete(0, sb.length());
System.out.println("Keys wurden gelöscht");
}
private final class KeyThread extends Thread {
private boolean state;
private long wait;
public KeyThread() {}
@Override
public void run() {
while(true) {
if(state && wait < System.currentTimeMillis()) {
state = false;
deleteKeys();
}
try {
Thread.sleep(1000);
}
catch (InterruptedException ex) {
System.out.println("asdfd");
}
}
}
public void setState(final boolean state) {
this.state = state;
}
public void setWait(final int wait) {
this.wait = System.currentTimeMillis() + wait;
}
}
public static void main(String[] args) throws IOException {
new Main();
}
}