Проблема с ProcessBuilder - PullRequest
       18

Проблема с ProcessBuilder

0 голосов
/ 11 февраля 2012

Следующий код очень хорошо открывает состояние в блокноте:

import java.util.*;
class test
{
public static void main(String args[])
{
    try{
    ProcessBuilder pb=new ProcessBuilder("notepad","F:/status");
    pb.start();
    }catch(Exception e)
    {
        System.out.println(e);
    }
}
}

Следующий код не воспроизводит песню:

import java.util.*;
class test
{
public static void main(String args[])
{
    try{
    ProcessBuilder pb=new ProcessBuilder("C:/Program Files (x86)/VideoLAN/VLC/vlc","D:/02 Tu Jaane Na");
    pb.start();
    }catch(Exception e)
    {
        System.out.println(e);
    }
}
}

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

Я думаю, что проблема в том, что вы игнорируете тот факт, что файлы, которые вы пытаетесь открыть, имеют расширение имени файла .

Проводник Windows по умолчанию не отображает расширения файлов - возможно, поэтому вы не знаете об их существовании.

Причина, по которой блокнот работал в вашем первом примере, заключается в том, что блокнот автоматически добавляет расширение .txt к параметру имени файла, если вы сами его не указали. Таким образом, в действительности открываемый файл - это не status, а status.txt.

VLC не имеет этой "расширенной" функциональности, потому что нет конкретного расширения имени файла, с которым он рассчитан.

Таким образом, вам нужно посмотреть вывод команды dir и добавить полное имя файла в качестве параметра.

Если это было реальной проблемой - возможно, вы захотите изменить настройки Windows Explorer для отображения расширений файлов:

enter image description here

или, что лучше, перейти на более дружественную для программиста ОС:)

2 голосов
/ 11 февраля 2012

Для кода 1.6+ используйте Desktop.open(File).


Конечно, разумная вещь, которую нужно сделать непосредственно перед звонком, это проверить File.exists().

OTOH, Desktop.open(File) выдает множество полезных исключений, в том числе:

  • NullPointerException - если файл нулевой
  • IllegalArgumentException - если указанный файл не существует
  • UnsupportedOperationException - если текущая платформа не поддерживает действие Desktop.Action.OPEN
  • IOException - если указанный файл не имеет связанного приложения или не удалось запустить связанное приложение

Правильно обработанное исключение будет указывать на непосредственную проблему.


Кроме того, класс Desktop разработан для кроссплатформенности и будет обрабатывать любой тип файла, для которого определена ассоциация. В этом смысле это гораздо более полезно для чего-то подобного, чем пытаться использовать Process.

...