#java #linux #runtime #terminal #exec
#java #linux #среда выполнения #терминал #exec
Вопрос:
Я хочу запустить 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 "rn");
bw.flush();
}
else
{
Runtime.getRuntime().exec(launcher);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
В Windows проблем нет, jar запускается в другой консоли.
Но в Linux jar запускается в фоновом режиме, а не в другом терминале.
Спасибо за помощь!
Комментарии:
1. И вообще, что такое «другой терминал»? /dev/ttyN? Многие установки Linux выполняются без графического интерфейса пользователя.
2. Хм. Зависит от общей картины. Java улучшена, чтобы быть независимой от платформы. Ну, у вас может быть причина, по которой вам нужно что-то, зависящее от платформы. В этом случае я бы на самом деле разделил зависящий от платформы материал, например, в небольшой оболочке оболочки, и вызвал бы это, чтобы сделать его настраиваемым (один использует Konsole, другой Gnome terminal, другой eterm или xterm …). Но если бы я хотел сохранить способ Java, то есть зависящий от платформы, я бы попытался создать «терминал» на Java: передать stderr и stdin в какое-нибудь Java «window».
Ответ №1:
Это будет зависеть от дистрибутива Linux и выбранной пользователем среды рабочего стола.
Вам нужно выяснить, какой эмулятор консоли / терминала вы используете, просмотреть его параметры командной строки и найти тот, который позволяет вам указать команду для запуска. Например:
-
gnome-terminal -e "some command"
выполняетсяsome command
в новой консоли, закрывая консоль при завершении выполнения команды. -
gnome-terminal -e "bash -c "some command" ; sleep 10"
запускаетсяsome command
в новой консоли, ожидая 10 секунд перед закрытием.
Другие эмуляторы консоли / терминала, вероятно, будут делать это по-другому…
Последний шаг — использовать Runtime.exec(...)
or ProcessBuilder
и friends для сборки составной команды.
Комментарии:
1. … и не забывайте, что окружение рабочего стола может отсутствовать вообще.