Ho lavorato a questo problema prima. Io uso un paio di tecniche diverse. Tuttavia è difficile avere una soluzione veramente cross-platform.
Ho provato a fare provare qualcosa di simile:
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");
Si può leggere/test e aggiungere "colonne di esportazione" al file .bashrc in ogni home directory degli utenti Linux con le String.contains ("colonne d'esportazione ") metodo e la proprietà user.dir.
Ciò consentirebbe di caricare le colonne ogni volta che viene avviata l'app java.
Quindi lo passerei a un file temporaneo. Come questo:
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);
}
}
Un'altra opzione che avete è quello di eseguire yor Java.jar con uno script bash all'avvio. All'interno dello script puoi usare "tput cols" per ottenere la larghezza. Quindi passa quel valore alla tua app Java come argomento String [] arg.
Come così:
//#!/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
perché questo è un compito così difficile con Java? Ovviamente un buon posto per scrivere una buona API. Suppongo che potremmo provare anche Apache.commons.exec?
Speravo che ci fosse qualcosa che avrebbe restituito la larghezza/altezza ecc o -1 se non può essere determinato ... vabbè. Benvenuto costanti hard-coded! – masher
@masher: il problema è che su Linux, la risposta dovrebbe essere quasi sempre "non può essere determinata con certezza". –
Ho provato a farlo con System.getenv ("COLUMNS") ma ha restituito null. Ubuntu 10.04/GNOME 2.30.2 – jsj