Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Перезапуск приложения


Автор: Grizli 27.6.2012, 12:03
Собственно я написал для своего приложения перезапуск с установкой ОЗУ для java, на Windows работает, а вот на линукс вообще ничего не происходит!

Код

public static void reboot(String memory) {
        try {
            String pathToJar;
            File jar = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getFile());
            try {
                pathToJar = jar.getCanonicalPath();
            } catch (IOException e1) {
                pathToJar = jar.getAbsolutePath();
            }
            try {
                pathToJar = URLDecoder.decode(pathToJar, "UTF-8");
            } catch (java.io.UnsupportedEncodingException ignore) { }
            
            ArrayList<String> params = new ArrayList<String>();
            if (PlatformUtils.getPlatform() == PlatformUtils.OS.windows) {
                params.add("javaw"); // под Шиндоус
            } else {
                params.add("java"); // Linux 
            }
            params.add(memory);
            params.add("-jar");
            params.add(pathToJar + "\\Launcher.jar");
            
            params.addAll(Arrays.asList(args_temp));

            ProcessBuilder pb = new ProcessBuilder(params);
            try {
                Process process = pb.start();
            if (process == null) {
                throw new Exception("Ошибка запуска");
            }
            } catch (IOException e) {
                System.out.println("Невозможно запустить");
            }
            System.exit(0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


И да, через -cp не вариант! 

Автор: Vasay 27.6.2012, 12:37
Grizli

Код

pathToJar + "\\Launcher.jar"


В обозначении пути принято использовать прямой слеш "/".  Обратный слеш это фишка винды. Использование прямого слеша универсально и для винды и для *nix.   Обратный, насколько я знаю в *nix не воспринимается.  

Т.е. попробуйте:
Код

pathToJar + "/Launcher.jar"

Автор: Pretorian 27.6.2012, 15:50
а не лучше вместо слеша использовать System.getProperty("file.separator")?
Код

pathToJar + System.getProperty("file.separator") + "Launcher.jar"

Автор: Stolzen 27.6.2012, 16:25
Java одинаково проглатывает как прямой, так и обратный слеши.

Автор: Vasay 27.6.2012, 16:51
Цитата(Stolzen @  27.6.2012,  16:25 Найти цитируемый пост)
Java одинаково проглатывает как прямой, так и обратный слеши.


Как сейчас не знаю, но обратный под никсами не проглатывала - лично сталкивался (во времена то ли 1.3 то ли 1.4).

"/" - с File API работает и в *nix и в win. 

Автор: jk1 27.6.2012, 16:56
Цитата

Как сейчас не знаю


И сейчас точно также. Не знаю, что конкретно Stolzen имел ввиду, но слэш в java имеет значение. И кроссплатформенным будет только способ с проперти, указанный выше по треду.

Автор: Vasay 27.6.2012, 17:03
Цитата(jk1 @  27.6.2012,  16:56 Найти цитируемый пост)
И кроссплатформенным будет только способ с проперти, указанный выше по треду.


В случае с File API - "/" тоже кросплатформенно.  Прямой слэш автоматически переводится в нужный разделитель. Это я читал в доках к File API

Автор: jk1 27.6.2012, 17:24
Цитата

Это я читал в доках к File API 


А причем тут File API? Топикстартер передает строку в ProcessBuilder

Автор: Vasay 27.6.2012, 18:06
Цитата(jk1 @  27.6.2012,  17:24 Найти цитируемый пост)
А причем тут File API? Топикстартер передает строку в ProcessBuilder


А, ну да smile надо спросить у автора - работает в винде с "/" или нет ? 

Впринципе может и не работать. Т.к. за то что работает "/" отвечает File преобразуя строку в абстрактный платформонезависимый путь. 

В случае же  запуска прцесса  "команда параметр_с_путем_к_файлу" если в пути будет не тот разделитель может быть и ошибка. Хотя, в случае, если команда - это "java -jar  параметр_с_путем_к_файл", думаю, путь пройдет через тот же механизм и java запустит нужный jar.

Автор: Grizli 27.6.2012, 21:02
Всё отлично работает, спасибо!  smile 
Решено же установил!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)