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 Computerworld
22. februar 2007 - 16:09
#1
du bliver nok noedt til at lave noget grimt med en traad og en timer
Hej Arne Jeg kan ikke rigtig sætte mig ind i hvordan dette ville fungere i dos miljø!?
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 } } }
Du er da simpelthen en knag - det dur jo bare :) Mange tak!!!!!
Arne - der er en lille bug hvis man kører programmet 2 gange i træk! Det er noget med FileDescriptoren!? Er det noget du kan se dig ud af? Ellers virker det bare...
Når jeg skriver 2 gange i træk, så er det at jeg kalder klassen og readLine 2 gange efter hinanden i samme run!
Hm. Jeg kan godt genskabe problemet. Den kommer jeg til at tygge lidt på. Den closer FileDescriptor.in alias stdin og det er jo ikke så godt.
Kurser inden for grundlæggende programmering