22. februar 2007 - 11:28
Der er
7 kommentarer og 1 løsning
Autoreplay i DOSprompt
Hej Jeg har et dosvindue kørende der laver nogle ting! På et tidspunkt vil jeg gerne have et svar fra en bruger (J eller N)! Her vil jeg normalt anvende System.in.read()! MEN! Efter 1 min skal systemet gå videre med evt. J (hvis brugeren forholder sig passivt), men hvis brugeren tykker N skal denne vælges! Kan dette lade sig gøre? Kan fint få det løst under awt, men ved ik helt hvordan i et dosvindue....
Annonceindlæg fra Kommando
Ideen er god nok. Men implementeringen viste sig noget tricky. Efter en masse forgaeves forsoeg endte jeg op med dette: import java.io.*; import java.nio.*; import java.nio.channels.*; import java.util.*; public class TimedRead { public String readLine(int ms) throws IOException { Timer t = new Timer(); FileChannel fc = new FileInputStream(FileDescriptor.in).getChannel(); ByteBuffer bb = ByteBuffer.allocate(80); String res = null; try { t.schedule(new InterruptMe(fc), ms); fc.read(bb); byte[] b = bb.array(); int len = bb.position(); while(len > 0 && (b[len-1] == '\r' || b[len-1] == '\n')) len--; res = new String(b, 0, len); } catch (AsynchronousCloseException e) { res = null; } t.cancel(); return res; } public static void main(String[] args) throws Exception { TimedRead tr = new TimedRead(); System.out.print("Enter something: "); String s = tr.readLine(5000); System.out.println("You entered: " + s); } } class InterruptMe extends TimerTask { private Channel c; public InterruptMe(Channel c) { this.c = c; } public void run() { try { c.close(); } catch (IOException e) { // ignore } } }