"non blocking console input" wieder rückgängig machen? [Gelöst]

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

"non blocking console input" wieder rückgängig machen? [Gelöst]

Beitrag von jmar83 » 21.10.2019 17:09:05

Hallo zusammen

Folgender Java-Code liegt mir vor:

Code: Alles auswählen

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-hub/bl ... nsole.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: Alles auswählen

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

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

Jedes mal, wenn ich nach dem Beenden die Enter-Taste drücke, ist wieder ein neuer `jmar83@debian-xxx-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/ma ... minal.java

Frage: Kennt sich jemand mit diesem (alles andere als alltäglichen) Thema aus? Bin für jegliche Inputs dankbar.
Zuletzt geändert von jmar83 am 12.11.2019 15:24:50, insgesamt 2-mal geändert.
Freundliche Grüsse, Jan

Benutzeravatar
Livingston
Beiträge: 1454
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

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

Beitrag von Livingston » 21.10.2019 22:08:16

Code: Alles auswählen

reset
Zur Not blind eingeben.
Wenn die Enter-Taste auch verhunzt ist, statt <ENTER> mal <CTRL>J ausprobieren. Schlimmstenfalls also im Blindflug:

Code: Alles auswählen

<CTRL>J
reset<CTRL>J

jmar83
Beiträge: 962
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

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

Beitrag von jmar83 » 22.10.2019 09:07:21

Vielen Dank, hat sich erledigt. Das Problem war, das der finally-Block natürlich nicht ausgelöst wird falls man die Esc-Taste drückt...
Freundliche Grüsse, Jan

Antworten