2013-07-05 1 views
0

Как запустить другой Java-процесс (с консолью) в Linux?Как запустить другой java-процесс с помощью консоли в java (в Linux)

Я знаю, что я должен использовать ProcessBuilder или Runtime.getRuntime().exec() выполнить команду, , но я хочу знать, как я могу показать отдельную команду X-окно терминала (напр. /usr/bin/xterm) или, по крайней мере, показать, глядя консольное окно-терминал и запустите java-процесс с помощью stdin, stdout, stderr.

Есть ли решение? Я слышал, что Process.getOutputStream() не работает на XTerm, но не пробовал еще (потому что я использую Windows, ..)

EDIT: Java-программа, которую я хочу, чтобы выполнить виды применения jline, который использует JNI ...

+0

Вы должны опубликовать минимальный рабочий пример, чтобы точно показать, в чем проблема. Что вы пробовали? Что не работает? –

+0

@ DanielH. Это не проблема. Я спрашиваю, как запустить java-процесс в терминале. – minmaxavg

ответ

1

Для начала terminl вы можете просто запустить следующий код:

new ProcessBuilder("/usr/bin/xterm").start(); 

Но я думаю, что это не вы на самом деле нужно. Потому что, даже вы передаете команду для запуска, скажем, ls в качестве аргумента:

new ProcessBuilder("/usr/bin/xterm", "-e", "ls").start(); 

вы получите выход из xterm (не из ls). Если вы хотите начать процесс и получить результат, вам необходимо сделать это так:

public static void main(String[] args) throws Exception { 
    // get content of the "/usr/bin" directory 
    ProcessBuilder pb = new ProcessBuilder("ls", "/usr/bin"); 
    pb.redirectErrorStream(true); 

    Process p = pb.start(); 
    InputStream is = p.getInputStream(); 
    System.out.println(toString(is)); 
    is.close(); 
} 

public static String toString(InputStream is) throws IOException { 
    Writer writer = new StringWriter(); 
    char[] buffer = new char[1024]; 
    Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); 
    int n; 
    while ((n = reader.read(buffer)) != -1) { 
     writer.write(buffer, 0, n); 
    } 
    return writer.toString(); 
} 
+0

Спасибо, поэтому я должен использовать '(новый ProcessBuilder ("/usr/bin/xterm "," -e "," java ", blah blah blah)). Start();' – minmaxavg

+0

Может быть, я должен использовать 'gnome-terminal 'если компьютер имеет среду рабочего стола GNOME? – minmaxavg

 Смежные вопросы

  • Нет связанных вопросов^_^