Как выполнить пакетный файл от Java?

Финализатор (иначе деструктор) является частью сборки "мусора" (GC) - это неопределенно, когда (или даже если) это происходит, как GC главным образом происходит в результате давления памяти (т.е. нуждаются в большем количестве пространства). Финализаторы обычно только используются для чистки неуправляемый ресурсы, так как управляемые ресурсы будут иметь свой собственный набор/распоряжение.

Следовательно IDisposable привык к [1 110] детерминировано , очищают объекты, т.е. теперь. Это не собирает память объекта (который все еще принадлежит GC) - но используется, например, для закрытия файлов, соединений с базой данных, и т.д.

существует много предыдущих тем на этом:

Наконец, обратите внимание, что это весьма характерно для IDisposable объект также иметь финализатор; в этом случае, Dispose() обычно вызовы GC.SuppressFinalize(this), означая, что GC не выполняет финализатор - это просто выбрасывает (намного более дешевую) память. Финализатор все еще работает, если Вы забываете к Dispose() объект.

10
задан Yatendra Goel 14 September 2009 в 12:05
поделиться

7 ответов

Когда Java запущена и вы используете Runtime.exec () с относительным путем, относительные средства относятся к текущему каталогу пользователя, из которого была вызвана JVM.

Это может сработать

Runtime.getRuntime().exec("cmd.exe", "/c", "./com/projct/util/server.bat");

, если вы запускаете java из родительского каталога com.

Или вы должны вычислить абсолютный путь:

Runtime.getRuntime().exec("cmd.exe", "/c", 
System.getProperty("user.dir")+"/com/projct/util/server.bat");

Я забыл, прочтите Когда Runtime.exec () не будет .

5
ответ дан 3 December 2019 в 17:21
поделиться

Для этого можно использовать ProcessBuilder . Он обеспечивает гораздо больший контроль, чем exec . В частности, он позволяет установить рабочий каталог с помощью метода directory .

Пример:

ProcessBuilder pb = new ProcessBuilder("server.bat");
pb.directory(new File(deployDir + "\\com\\project\\util"));
Process p = pb.start();
int exitStatus = p.waitFor();

Конечно, ваше приложение должно откуда-то получать deployDir. Его можно установить в среде, в файле конфигурации приложения, это может быть каталог текущего пользователя или что-то еще.

8
ответ дан 3 December 2019 в 17:21
поделиться

Вы должны запустить «cmd.exe» с аргументами «/ c» и «server.bat»:

Runtime.getRuntime().exec(new String[] { "cmd.exe", "/c", "server.bat" } );
6
ответ дан 3 December 2019 в 17:21
поделиться

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

Commandline cl = new Commandline();

cl.setExecutable( "cmd.exe" );
cl.createArg().setValue( "/c" );

cl.setWorkingDirectory( new File(System.getProperty("user.dir"), 
    "/com/project/util/Server.bat"));

cl.createArg().setValue( "/c" );

StreamConsumer consumer = new StreamConsumer() {
    public void consumeLine( String line ) {
        //do something with the line
    }
};

StreamConsumer stderr = new StreamConsumer() {
    public void consumeLine( String line ) {
        //do something with the line
    }
};

int exitCode;

try {
    exitCode = CommandLineUtils.execute( cl, consumer, stderr, getLogger() );
} catch ( CommandLineException ex ) {
    //handle exception
}
0
ответ дан 3 December 2019 в 17:21
поделиться

Лучше всего сохранить каталог установки приложения в системе, а затем использовать его для построения ваших путей в приложении. System.getProperty ("user.dir"

0
ответ дан 3 December 2019 в 17:21
поделиться

Второй параметр для exec - это String [] аргументов для настроек среды (null означает наследование текущих параметров процесса), а третий параметр для exec должен быть файлом, предоставляющим рабочий каталог. . Попробуйте следующее:

Runtime.getRuntime().exec("cmd /c server.bat", null, new File("./com/project/util"));
0
ответ дан 3 December 2019 в 17:21
поделиться

Вы можете попробовать его с Desktop, если поддерживается (Java 1.6)

    File file = new File("server.bat");
    Desktop.getDesktop().open(file);
4
ответ дан 3 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: