"non blocking console input" wieder rückgängig machen?

Diskutiere "non blocking console input" wieder rückgängig machen? im Debian/Ubuntu/Knoppix Forum im Bereich Linux Distributionen; Hallo zusammen Folgender Java-Code liegt mir vor: import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream;...

  1. jmar83

    jmar83 Routinier

    Dabei seit:
    05.07.2011
    Beiträge:
    281
    Zustimmungen:
    0
    Hallo zusammen

    Folgender Java-Code liegt mir vor:

    Code:
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    import javax.security.auth.login.Configuration;
    
    public class TerminalUtil {
    
        private static String ttyConfig;
    
        public static void setTerminalToCBreak() throws IOException, InterruptedException {
    
            TerminalUtil.ttyConfig = TerminalUtil.stty("-g");
    
            // TerminalUtil.stty("-icanon min 1");
           
            TerminalUtil.stty("-icanon min 1 -icrnl -inlcr -ixon");
    
            TerminalUtil.stty("-echo");
           
            TerminalUtil.stty("-cooked");
    
        }
    
        public static String getTTYConfig() {
            return TerminalUtil.ttyConfig;
        }
    
        public static String stty(final String args) throws IOException, InterruptedException {
            final String cmd = "stty " + args + " < /dev/tty";
    
            return TerminalUtil.exec(new String[] { "sh", "-c", cmd });
        }
    
        private static String exec(final String[] cmd) throws IOException, InterruptedException {
            final ByteArrayOutputStream bout = new ByteArrayOutputStream();
    
            final Process p = Runtime.getRuntime().exec(cmd);
            int c = 0;
            InputStream in = p.getInputStream();
    
            while ((c = in.read()) != -1) {
                bout.write(c);
            }
    
            in = p.getErrorStream();
    
            while ((c = in.read()) != -1) {
                bout.write(c);
            }
    
            p.waitFor();
    
            final String result = new String(bout.toByteArray());
            return result;
        }
    }
    
    (https://github.com/Robo-HUB/robo-hu.../hu_berlin/informatik/ev3/sim/KeyConsole.java)


    ...nun ist aber so, dass wenn ich ein Abbruchkriterium habe (break z.B. bei `#` im while(true) in der main-Funktion), dass sich dann die Konsole nicht mehr richtig "regneriert".

    Dann kommt das dabei raus:

    Code:
    jmar83@debian-martij-dev:~$ java -jar '/home/jmar83/Desktop/Eclipse Workspaces/Java/ConsoleTest/ci.jar'
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    Anwendung wird beendet
    jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$ jmar83@debian-martij-dev:~$
    

    Irgendwie scheint es halt eben doch nicht so gut zu klappen wie hier beschrieben: https://www.darkcoding.net/software/non-blocking-console-io-is-not-possible/

    Jedes mal, wenn ich nach dem Beenden die Enter-Taste drücke, ist wieder ein neuer `jmar83@debian-martij-dev:~$`-Eintrag drin...(?)

    Und `-icanon min 1 -icrnl -inlcr -ixon` vs. `-icanon min 1"` macht NULL unterschied - es heisst, dass etwa `icrnl` bei FreeBSD nicht unterstützt wird: https://github.com/jline/jline2/blob/master/src/main/java/jline/UnixTerminal.java

    Frage: Kennt sich jemand mit diesem (alles andere als alltäglichen) Thema aus? Bin für jegliche Inputs dankbar.
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.251
    Zustimmungen:
    19
    Reagiert die Konsole nach einem clear oder reset wieder normal?
     
  4. jmar83

    jmar83 Routinier

    Dabei seit:
    05.07.2011
    Beiträge:
    281
    Zustimmungen:
    0
    Habe das Problem nun gefunden: Das was im finally-Block drin ist, wird natürlich nicht ausgeführt wenn man die Esc-Taste drückt - deshalb bestand das Problem.
     
Thema:

"non blocking console input" wieder rückgängig machen?

Die Seite wird geladen...

"non blocking console input" wieder rückgängig machen? - Ähnliche Themen

  1. Lernprojekt - Nonblocking TCP Portscanner

    Lernprojekt - Nonblocking TCP Portscanner: Hallo, ich moechte meine C-Kenntnisse etwas vertiefen. Dazu moechte ich einen Portscanner schreiben, der versucht eine TCP-Verbindung zu einem...
  2. Non-blocking I/O in SSH-session

    Non-blocking I/O in SSH-session: Hallo zusammen, Ist es möglich zu verhindern, daß SSH das O_NONBLOCK flag auf fd1 löscht? Das folgende kleine, ordentlich funktionierende...
  3. Console I/O mit loggen

    Console I/O mit loggen: Hi all, Ich suche nach einer einfachen Möglichkeit alle Eingeben von meinem Benutzter (und root) über die Konsole mit zu loggen (und auch die...
  4. Console oder Terminal auf 80x25 einstellen?

    Console oder Terminal auf 80x25 einstellen?: Ich habe ein Fujitsu TX1310-M1 mit SLES11 SP3 installiert. Ich habe in grub Video=640x480 eingestellt. Mit "stty size", bekomme "30 80" und "echo...
  5. Serielle Console hängt nach einger Zeit

    Serielle Console hängt nach einger Zeit: Hallo Unixboarder! Habe mal wieder ein Problem mit einer Box beim Provider, der mir nicht helfen kann oder will - grrrr. Ich kann...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden