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

jmar83

jmar83

Hans Müller
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.
 
Reagiert die Konsole nach einem clear oder reset wieder normal?
 
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

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Displayport + externer Monitor zeigt bei startx nichts erst bei DVI

Wo sind die Geräte?

Prozess aus eigenem Init script wird gekillt

Zurück
Oben