2016-03-14 16 views
5

Sono completamente nuovo alla programmazione batch di Windows. Quello che voglio ottenere è scrivere uno script di avvio per un'applicazione Java. Eppure, non si avvia l'applicazione Java, ma stampa leWindows batch & java: combinazione -XX: comando OnOutOfMemoryError e parametri batch

Usage: java [-opzioni] Classe [args ...]

(per eseguire una classe)

o Java [-opzioni] -jar jarFile [args ...]

(per eseguire un file jar)

...

che indica che i miei parametri non sono riconosciuti correttamente.


Ecco il mio MCVE per lo script non-lavoro:

set memory=600000 
java -XX:OnOutOfMemoryError="taskkill /PID %p" -Xmx%memory%K -jar MyApp.jar 

Nello scenario reale, memory è calcolato per impostare la dimensione heap massima ottimale per l'applicazione.


Lasciando uno di entrambi i parametri, l'app viene avviata. Così

java -XX:OnOutOfMemoryError="taskkill /PID %p" -jar MyApp.jar 

e

set memory=600000 
java -Xmx%memory%K -jar MyApp.jar 

opere, ma ho bisogno di entrambi i parametri per lavorare in una sola chiamata.

+0

Prova a mettere '@echo on' /' @ eco off' nella vostra script ([qui descritto] (http://stackoverflow.com/a/10237457/3788176)) e vedere quale comando è effettivamente in esecuzione nel caso "both parameters". –

+0

Grazie per l'input! Usando '@echo on' si ottiene la stampa' java -XX: OnOutOfMemoryError = "taskkill/PID memoryK -jar MyApp.jar', che indica un errore con' "', che non è più chiuso, e il parametro, che è non aggiunto ('% memoria%)' ... –

+2

Quello che sembra sta succedendo c'è il '%' in '% p' è considerato un" opening "'% 'per la sostituzione - Penso che' %%' sia il token per un singolo '%' (come in ' metodi simili a printf'). –

risposta

2

Se si inserisce @echo on e @echo off nel proprio script, è possibile visualizzare quale comando viene effettivamente eseguito.

Si dice che il comando risultante è:

java -XX:OnOutOfMemoryError="taskkill /PID memoryK -jar MyApp.jar 

che lo fa apparire come il % di %p viene presa in considerazione una "apertura" % per la sostituzione.

A parte le virgolette non bilanciate, ciò significa che non si sta effettivamente dando a java un comando da eseguire: lo -jar MyApp.jar è effettivamente all'interno della stringa -XX:OnOutOfMemoryError.

Provare a sostituire il singolo % con %% - secondo this question, che è come scrivere un letterale % in un file BAT:

java -XX:OnOutOfMemoryError="taskkill /PID %%p" -Xmx%memory%K -jar MyApp.jar 
+0

Ho appena scritto un commento, questo risolve il problema! Il primo '%' all'interno del parametro OnOutOfMemoryError dovette essere preceduto da escape con '%%'. Grazie! –

+0

Nessun problema. Per favore considera di accettare la risposta :) –

+2

No, non lo farò! Sto solo scherzando, devo solo aspettare qualche minuto prima di poterlo fare: P –

Problemi correlati