Runtime.getruntime().exec неправильно работает с gedit в Ubuntu

Мне нужно открыть txt-файл из места в Ubuntu (например, /usr/local/share/SomeFolder/Readme.txt) через мой код Java.

Я использовал Runtime.getRuntime.exec(String) и Runtime.getRuntime().exec(args) с gedit, но он открывает новую вкладку рядом с файлом Readme.txt.

Код приведен ниже

String x="gedit /usr/local/share/SomeFolder/Readme.txt";
Runtime.getRuntime.exec(x);

<OR>

String[] args={"gedit","/usr/local/share/SomeFolder/Readme.txt"};
Runtime.getRuntime().exec(args)

Я также пытался использовать ProcessBuilder, но он ведет себя так же. Также я изучил различные варианты gedit, но все равно не повезло.

Когда я запускаю «gedit /usr/local/share/SomeFolder/Readme.txt» с терминала, он открывает только один экземпляр и файл Readme.txt.

Возможно, gedit запрограммирован на такое поведение или я что-то делаю не так.

Любая помощь будет оценена.

Я использую Ubuntu 12.04 LTS, 64 бит с Eclipse Juno SR2 (JDK 1.7u51)

Спасибо !


person Abbas    schedule 01.12.2014    source источник
comment
Вместо этого используйте ProcessBuilder   -  person jmj    schedule 01.12.2014
comment
Я тоже это использовал.   -  person Abbas    schedule 01.12.2014
comment
поделитесь кодом, который использует ProcessBuilder   -  person jmj    schedule 01.12.2014
comment
String args[]={gedit,/usr/local/share/SomeFolder/Readme.txt}; Процесс pb=новый ProcessBuilder(аргументы).start();   -  person Abbas    schedule 01.12.2014
comment
Какие ошибки вы получаете? Вы читаете вывод Processs?   -  person MadProgrammer    schedule 01.12.2014
comment
@MadProgrammer Я не получаю никакой ошибки, просто открываю два окна.   -  person Abbas    schedule 01.12.2014
comment
Очень вероятно, что это поведение gedit, которое вы можете обойти. Может быть, что-то вроде Runtime.getRuntime.exec("bash -c gedit /usr/local/share/SomeFolder/Readme.txt"); может помочь.   -  person Erich Kitzmueller    schedule 01.12.2014
comment
@ammoQ Я только что попробовал, но теперь он открывает пустой документ, а не файл Readme.txt.   -  person Abbas    schedule 01.12.2014


Ответы (1)


Попробуйте это, я только что проверил с помощью ProcessBuilder

    ProcessBuilder pb = new ProcessBuilder("gedit", "/home/honey/filename.json");
    pb.redirectOutput(Redirect.INHERIT);

    Process p = pb.start();
    p.waitFor();

    //This will print console logs of your process
    InputStream is = null;
    try {
        is = p.getInputStream();
        int in = -1;

        while ((in = is.read()) != -1) {
            System.out.print((char) in);
        }

    } finally {
        is.close();
    }
person Honey Goyal    schedule 01.12.2014
comment
Спасибо. Но это также открывает новое окно документа рядом с существующим. Журналы консоли не печатаются. Я использую Ubuntu 12.04 LTS, 64 бит с Eclipse Juno SR2 (JDK 1.7u51) - person Abbas; 01.12.2014
comment
Может быть, я неправильно понял, так чего вы хотите достичь? - person Honey Goyal; 01.12.2014
comment
Я хочу предотвратить запуск другого экземпляра документа при запуске txt-файла с помощью gedit. Когда я запускаю его с помощью построителя процессов/runtime.getRuntime, он открывает дополнительное окно. Пожалуйста, попробуйте и убедитесь, что он откроет другой экземпляр. - person Abbas; 01.12.2014
comment
Я работаю над CentOS, см. этот результат с тем же кодом ссылка . Я попытался изменить имя файла. - person Honey Goyal; 01.12.2014
comment
Я использую Ubuntu и не могу протестировать его в вашей среде. Если у вас есть возможность, пожалуйста, протестируйте его на Ubuntu. - person Abbas; 01.12.2014
comment
Да. Вы правы, в Ubuntu всегда открывается новый пустой документ. Я тестировал здесь. Это непредсказуемо :( , извините, вам не повезло. - person Honey Goyal; 01.12.2014