Где заканчивается Java и начинается Windows? Вопрос файлового разделителя - PullRequest
0 голосов
/ 21 июня 2011

Я хочу запустить Java jar по времени выполнения, но Windows снова создает проблемы. Я знаю, что это должно было произойти сотни раз, но я попробовал несколько вещей (например, String.replace ("/", "\")), и, поскольку я не могу отлаживать в Windows, это занимает некоторое время. Это прекрасно работает под Unix:

public boolean run(String args[], String workingDir, boolean output) throws 

    FileNotFoundException {
                if (args.length <= 0) {
                    System.err.println("No cmd provided");
                }
                if (workingDir == null) {
                    workingDir = "./";
                }
                ProcessBuilder pb = new ProcessBuilder(args);

                pb.directory(new File(workingDir));
                Process p;
                int exitValue = 0;
                try {
                    p = pb.start();
                    InputStream is = p.getInputStream();
                    InputStreamReader isr = new InputStreamReader(is);
                    BufferedReader br = new BufferedReader(isr);

                    String line;
                    p.waitFor();
                    if (output) {
                        while ((line = br.readLine()) != null) {
                            setChanged();
                            notifyObservers(line);
                        }
                    }
                    exitValue = p.exitValue();
                } catch (InterruptedException ex) {
                    return false;
                } catch (IOException ex) {
                    return false;
                }
                if (exitValue == 0) {
                    return true;
                } else {
                    throw new FileNotFoundException();
                }
            }

запущено:

public static void launchApp(String subPath) throws FileNotFoundException {
    String[] args = String.format("java -jar -Xdock:name=AppName -Xdock:icon=%sicon.icns %AppName.jar", subPath, subPath).split(" ");
    ExecRuntime.run(args, null);
}

Ответы [ 2 ]

2 голосов
/ 21 июня 2011

Используйте стандартные свойства системы java при выполнении конкретных задач для платформы Java, чтобы обеспечить переносимость вашего приложения. См. Свойства системы для получения дополнительной информации о некоторых значениях, доступных для вашего приложения.

0 голосов
/ 22 июня 2011

После получения кода приложения я обнаружил 2 ошибки: 1. В моем методе операционной системы использовался String.replaceAll ("/", "\") и выдавалось исключение StringIndexOutOfBoundsException (не знаю почему), но String.replac ()работает отлично 2. Я был достаточно наивен, чтобы думать, что виртуальная машина игнорирует неподдерживаемые параметры, такие как -Xdock: name и -Xdock: icon, но это не так, поэтому я создал отдельную строку exec для Mac.Спасибо за ваши советы и помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...