Ich habe an diesem Problem schon gearbeitet. Ich benutze ein paar verschiedene Techniken. Es ist jedoch schwierig, eine wirklich plattformübergreifende Lösung zu haben.
Ich habe versucht zu tun versuchen, etwas wie folgt aus:
String os = System.getProperty("os.name").toLowerCase();
//Windows
if(os.contains("win")){
System.out.append("Windows Detected");
//set Windows Dos Terminal width 80, height 25
Process p = Runtime.getRuntime().exec("mode 80, 25");
}
//Mac
if(os.contains("mac")){
System.out.println("Macintosh Detected");
//... I dont know...try Google
}
//Linux
if(os.contains("linux")){
System.out.println("Linux Detected");
Sie können/Test lesen und "export Columns" in die Datei .bashrc in jeder Linux-Anwender mit den String.contains Home-Verzeichnis anhängen ("Export SÄULEN ") Methode und die Eigenschaft user.dir.
Damit können Sie die Spalten jedes Mal laden, wenn die Java-App gestartet wird.
Dann würde ich es in eine temporäre Datei übergeben. Wie folgt aus:
try {
ProcessBuilder pb = new ProcessBuilder("bash","-c","echo $COLUMNS >/home/$USER/bin/temp.txt");
pb.start();
}catch (Exception e) {
System.out.println("exception happened - here's what I know: ");
e.printStackTrace();
System.exit(-1);
}
}
Eine weitere Option, die Sie haben, ist yor Java.jar mit einem Bash-Skript beim Start auszuführen. Innerhalb des Skripts können Sie "tput cols" verwenden, um die Breite zu erhalten. Übergeben Sie diesen Wert als String [] arg an Ihre Java-App.
Wie so:
//#!/bin/bash
//#clear the screen
clear
//#get the console width and height
c=$[$(tput cols)]
l=$[$(tput lines)]
//#pass the columns, lines and an optional third value as String[] args.
java -jar ~/bin/Plus.jar $c $l $1
warum ist das so eine schwierige Aufgabe mit Java? Offensichtlich ein guter Ort, um eine gute API zu schreiben. Ich denke, wir könnten Apache.commons.exec auch versuchen?
Ich hatte gehofft, es würde etwas geben, das die Breite/Höhe usw. zurückgeben würde oder -1, wenn es nicht bestimmt werden kann ... na ja. Willkommen fest codierte Konstanten! – masher
@masher: Das Problem ist, dass unter Linux die Antwort fast immer "nicht mit Bestimmtheit bestimmt werden kann". –
Ich habe versucht, dies mit System zu tun.getenv ("COLUMNS") aber es gab null zurück. Ubuntu 10.04/GNOME 2.30.2 – jsj