Runtime exec на Linux - PullRequest
       31

Runtime exec на Linux

0 голосов
/ 16 апреля 2011

Я хочу запустить Java-программу (jar) в другом терминале в Linux.Вот мой код:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.OutputStreamWriter;

public class Launcher
{
    public static void main(String[] args)
    {
            try
            {
                Thread.sleep(6000);
                Process p;

                if( System.getProperty("os.name").toLowerCase().contains("win") )
                {   
                    BufferedWriter bw;
                    p = Runtime.getRuntime().exec("cmd.exe /c start java -Xms512M -Xmx512M -jar craftbukkit.jar");
                    bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
                    bw.write(launcher + "\r\n");
                    bw.flush();
                }
                else
                {   
                    Runtime.getRuntime().exec(launcher);
                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
        }
    }
}

В Windows проблем нет, jar запускается в другой консоли.Но в Linux jar запускается в фоновом режиме, а не в другом терминале.

Спасибо за помощь!

1 Ответ

1 голос
/ 16 апреля 2011

Это будет зависеть от дистрибутива Linux и выбранной пользователем среды рабочего стола.

Вам необходимо выяснить, какой эмулятор консоли / терминала вы используете, посмотреть на параметры его командной строки и найти тот, который позволяет вам указать команду для запуска. Например:

  • gnome-terminal -e "some command" запускает some command в новой консоли, закрывая консоль при выходе из команды.

  • gnome-terminal -e "bash -c \"some command" ; sleep 10\" запускает some command в новой консоли, ожидая 10 секунд перед закрытием.

Другие эмуляторы консоли / терминала, вероятно, будут делать это по-другому ...

Последний шаг - использовать Runtime.exec(...) или ProcessBuilder и друзей для сборки составной команды.

...