Mais sobre o Windows ... a variável java.home nem sempre é o mesmo local do binário executado.
Como Denis The Menace diz, o instalador coloca arquivos Java em Arquivos de Programa , mas também java.exe no System32 . Com nada o Java relacionado no caminho java -version ainda pode funcionar. No entanto, quando o programa do PeterMmm é executado, ele informa o valor dos Arquivos de Programas como java.home , isso não está errado (o Java está instalado lá), mas o binário real em execução está localizado no System32 .
Uma maneira de procurar a localização do binário java.exe , adicione a seguinte linha ao código do PeterMmm para manter o programa em execução por mais algum tempo:
try{Thread.sleep(60000);}catch(Exception e) {}
Compile e execute-o e, em seguida, procure o local da imagem java.exe . Por exemplo, no Windows 7, abra o gerenciador de tarefas, encontre a entrada java.exe , clique com o botão direito do mouse e selecione 'abrir localização do arquivo', isso abre a localização exata do binário Java. Nesse caso, seria System32 .