Outra possibilidade é que há um batchfile chamado java que está sendo chamado, em vez do java.exe normal (embora o arquivo em lote possa invocar o executável, possivelmente também configurando coisas como o CLASSPATH de antemão). Executar um arquivo batch a partir de outro transferirá a execução para o outro lote de arquivos, não retornando ao invocador. Para executá-lo e continuar a execução do arquivo de lote original, use call:
call java
E veja se isso faz diferença.