Diferença entre 'java', 'javawv e' javaws '


184

Qual é a diferença entre java, javawe javaws?

Eu encontrei no Windows a maioria do Java é iniciada javaw.


2
Isso ocorre porque o Windows tem esse hábito irritante de iniciar um Terminal real (que nem deveria ser chamado de "Terminal" ...) em primeiro plano sempre que você inicia um programa java -cp .... Como quase ninguém quer isso, javawé a opção de fazer essa janela irritante desaparecer.
Matthieu

Respostas:


212

Consulte a documentação para:

  • javacomando 1 / javawcomando 2
    1. A javaferramenta inicia um aplicativo Java. Isso é feito iniciando um ambiente de tempo de execução Java, carregando uma classe especificada e chamando o mainmétodo dessa classe .
    2. O javawcomando é idêntico a java, exceto pelo fato de javawnão haver uma janela do console associada. Use javawquando você não quiser que uma janela do prompt de comando apareça.
  • javawscomando , o " comando Java Web Start "

    O javawscomando inicia o Java Web Start, que é a implementação de referência do Java Network Launching Protocol (JNLP). O Java Web Start lança aplicativos / applets Java hospedados em uma rede.

    Se um arquivo JNLP for especificado, ativará javawso aplicativo / applet Java especificado no arquivo JNLP.

    O javawsiniciador tem um conjunto de opções suportadas na versão atual. No entanto, as opções podem ser removidas em uma versão futura.

    Consulte também APIs, recursos e opções descontinuadas das notas de versão do JDK 9 :

    As tecnologias de implantação Java estão obsoletas e serão removidas em uma versão futura das funcionalidades
    Java Applet e WebStart, incluindo a API Applet, o plug-in Java, o Java Applet Viewer, JNLP e Java Web Start, incluindo a javawsferramenta , estão obsoletas no JDK 9 e será removido em uma versão futura.


69

java: executor de aplicativo Java associado a um console para exibir resultados / erros

javaw: executor de aplicativo (com janela Java ) não associado ao console. Portanto, nenhuma exibição de saída / erros. Pode ser usado para enviar silenciosamente a saída / erros para arquivos de texto. É usado principalmente para iniciar aplicativos baseados em GUI.

javaws: ( Java web start ) para baixar e executar os aplicativos da web distribuídos. Novamente, nenhum console está associado.

Todos fazem parte do JRE e usam a mesma JVM.


então se eu instalei o JRE, javawdeveria estar no meu caminho? (Não é)
endolith

@ endolith, a instalação Java no Windows, na minha experiência, não adiciona nada à variável PATH. Se você instalou apenas o JRE, provavelmente precisará adicionar o diretório JRE / bin ao PATH manualmente; se você instalou o JRE e o JDK, adicione o JDK / bin ao PATH.
Mcduffee # 24/14

9

O java.exe está associado ao console, enquanto o javaw.exe não possui essa associação. Portanto, quando o java.exe é executado, ele abre automaticamente uma janela de prompt de comando onde os fluxos de saída e erro são mostrados.


6

Em http://publib.boulder.ibm.com/infocenter/javasdk/v6r0/index.jsp?topic=%2Fcom.ibm.java.doc.user.aix32.60%2Fuser%2Fjava.html :

O comando javaw é idêntico ao java, exceto que o javaw não possui uma janela do console associada. Use javaw quando não desejar que uma janela do prompt de comando seja exibida. O lançador javaw exibe uma janela com informações de erro, se falhar.

E o javaws é para aplicativos, applets ou algo do tipo Java Web Start, eu suspeitaria.


O link está quebrado: "A página solicitada não existe ou pode ter sido movida."
Peter Mortensen

1

Eu verifiquei se o redirecionamento de saída funciona com javaw:

javaw -cp ... mypath.MyClass ... arguments 1>log.txt 2>err.txt

Isso significa que, se o aplicativo Java imprimir alguma coisa via System.out ou System.err, ele será gravado nesses arquivos, como também com o uso de java (sem w). Especialmente na partida java, o JRE pode gravar erros de partida (classe não encontrada) no tubo de saída de erro. A este respeito, é essencial conhecer os erros. Sugiro usar o redirecionamento do console em qualquer caso, se javawfor chamado.

Ao contrário, se você usar

start java .... 1>log.txt 2>err.txt

Com o startcomando do console do Windows , o redirecionamento de saída do console não funciona javanem com javaw.

Explicação do motivo: acho que javawabre um processo interno no sistema operacional (adequado usando a classe java.lang.Process) e transfere um redirecionamento de saída conhecido para esse processo. Se nenhum redirecionamento for fornecido na linha de comando, nada será redirecionado e o processo interno iniciado para javawnão terá nenhuma saída do console. O comportamento do java.lang.Process é semelhante. A máquina virtual também pode usar esse recurso interno javaw.

Se você usar 'start', o console do Windows criará um novo processo para o Windows executar o comando após o início, mas esse mecanismo não usa um determinado redirecionamento para o subprocesso iniciado, infelizmente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.