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

jmar83

jmar83

Routinier
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.
 
M

marce

Kaiser
Reagiert die Konsole nach einem clear oder reset wieder normal?
 
jmar83

jmar83

Routinier
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.
 

Ähnliche Themen

Input == String => false

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

Prozess aus eigenem Init script wird gekillt

NagiosGrapher 1.7.1 funktioniert nicht

dovecot und postfix Konfiguration Problem

Oben