1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помощь с jni

Тема в разделе "Разработка плагинов для новичков", создана пользователем Shevchik, 9 мар 2013.

  1. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Дописываю функцию авторестарта для плагина но столкнулся с одной проблемой.
    Код:
    public class JVMshutdownhook extends Thread {
     
        private String crashrestartscriptpath = "start.sh";
        public void setpath(String path)
        {
            this.crashrestartscriptpath = path;
        }
     
        public void restart()
        {
        try {
            File restartscript = new File(crashrestartscriptpath);
            if (restartscript.exists()) {
            System.out.println("[AutoSaveWorld] Startup script found. Restarting");
            String OS = System.getProperty("os.name").toLowerCase();
            if (OS.contains("win")) {
                Runtime.getRuntime().exec("cmd /c start " + restartscript.getCanonicalPath());
            } else {
                Runtime.getRuntime().exec(restartscript.getCanonicalPath());
            }
            } else {
            System.out.println("[AutoSaveWorld] Startup script not found. Creating new one. This may work strange or not work at all");
            String processname = new File(Bukkit.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getName();
            String memory = Runtime.getRuntime().maxMemory()/1024/1024+"M";
            String encoding = Charset.defaultCharset().toString();
            String runcommand = "java -server -Xmx"+memory+" -XX:+UseBiasedLocking -XX:+AggressiveOpts -XX:+UseStringCache -XX:+UseFastAccessorMethods -Dfile.encoding="+encoding+" -jar "+processname;
            String OS = System.getProperty("os.name").toLowerCase();
            if (OS.contains("win")) {
                File startupscript = new File("ASWstartupscript.bat");
                PrintWriter out = new PrintWriter(startupscript.getAbsoluteFile());
                out.print(runcommand);
                out.close();
                Runtime.getRuntime().exec("cmd /c start " + startupscript.getCanonicalPath());
            } else {
      *              File startupscript = new File("ASWstartupscript.sh");
                    PrintWriter out = new PrintWriter(startupscript.getAbsoluteFile());
                    out.println("#!/bin/sh");
                    out.println("BINDIR=$(dirname '$(readlink -fn '$0')')");
                    out.println("cd '$BINDIR'");
                    out.print(runcommand);
                    out.close();
                    startupscript.setExecutable(true);
                    Runtime.getRuntime().exec(startupscript.getCanonicalPath());    *
            }
            }
        } catch (Exception e)
        {System.out.println("[AutoSaveWorld] CrashRestart failed");
        e.printStackTrace();}
        }
     
     
        public void run()
        {
            restart();
        }
     
    }
    но часть от звёздочки до звёздочки не работает(скрипт создаётся, но не запускает сервер)
    Что я делаю не так?
     
    Likeobot нравится это.
  2. Степаха

    Степаха Активный участник

    Баллы:
    78
    Имя в Minecraft:
    Samtar
    "new File, new PrintWriter" Зачем там пробелы?

    p.s. Может я что то не догнал?
     
  3. ksada

    ksada Старожил Пользователь

    Баллы:
    103
    Skype:
    k-s-a-d-a
    Причём тут JNI?
     
    Likeobot и Сникерсни нравится это.
  4. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Да почти и не причём, кроме exec.
    А по сути?
     
  5. ksada

    ksada Старожил Пользователь

    Баллы:
    103
    Skype:
    k-s-a-d-a
    Может нет прав на выполнение?
    Код:
    Runtime.getRuntime().exec("chmod 0777 "+startupscript.getCanonicalPath());
     
  6. limito

    limito Старожил Пользователь

    Баллы:
    103
    Код:
    startupscript.setExecutable(true);
    Есть права.

    В одинарных кавычках нельзя обращаться к переменным. Т.е. будет попытка перейти в папку $BINDIR, которой не существует.
    Поэтому надо использовать двойные кавычки.
    Код:
    out.println("cd \"$BINDIR\"");
     
  7. Автор темы
    Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Не помогло, один чёрт само не стартует ((
     
    Сникерсни нравится это.

Поделиться этой страницей