Pergunta

Isso está relacionado a uma pergunta anterior de um usuário diferente, perguntando Como detectar esse código está em execução dentro do eclipse ide.

Percebi que o Eclipse sempre lança programas com javaw ao invés de java. (Isso não implica um programa lançado com javaw foi lançado a partir do eclipse).

Eu posso encontrar os argumentos aprovados usando

RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
List<String> lst = RuntimemxBean.getInputArguments();
for (int i = 0; i < lst.size(); i++)
    System.out.println(lst.get(i));

Mas isso não me diz se foi lançado usando java ou javaw.

  1. Existe alguma maneira de descobrir se foi lançado usando java ou javaw?
  2. Por que o eclipse usa javaw Para lançar programas?
Foi útil?

Solução

System.Console () retornará null, já que a única diferença entre usar java e javaw é isso para javaw, não há janela de console associada.

Aqui está um pequeno programa de teste que você pode usar para demonstrar que:

import javax.swing.JOptionPane;
public class ConsoleTest {
    public static void main(String[] args) {
        if (System.console() == null) {
            JOptionPane.showMessageDialog(null, "System.console() is null");
        } else {
           JOptionPane.showMessageDialog(null, "System.console() is not null");
        }
    }
}

No entanto, ao fugir de dentro do eclipse, System.console() ainda voltará null, mesmo quando começou com java.

Na configuração de lançamento do Eclipse, Jre Tab, se você alterar o tempo de execução JRE para JRE alternativo, você pode alterar o executável Java de javaw para java.

Outras dicas

Procurando por System.Console () não funcionou para mim, por causa de:

  1. Requer JDK 6 ou mais tarde
  2. Objeto de console também está faltando, se a aplicação foi executada através do RUNTIME.EXEC (String) método. Isso foi fundamental para mim, porque usamos muito script automatizado.

Então, estou usando a solução seguinte:

private static boolean isJavaw() {
  try {
    System.in.available();
    return false;
  } catch (IOException e) {
    // invalid handle in case of javaw
    return true;
  }
}

Funciona bem com os JDKs 5, 6 e 7.

Existe alguma maneira de descobrir se foi lançado usando Java ou Javaw?

De acordo com documentação: O comando Javaw é idêntico ao Java, exceto que, com Javaw, não há janela de console associada. Use Javaw quando não quiser que uma janela de prompt de comando apareça. O Javaw Launcher, no entanto, exibirá uma caixa de diálogo com informações de erro se um lançamento falhar por algum motivo.

Por que o Eclipse usa o Javaw para lançar programas?

  1. Mudar de Javaw para Java:

    1. Abra sua configuração de lançamento escolhendo 'Run'-> 'Run ...' na barra de menus.
    2. Selecione a configuração de lançamento do seu aplicativo.
    3. Mude para a página 'Jre'.
    4. Desmarcar 'Use o executável Java padrão'
    5. Digite 'Java' no lugar de 'Javaw'.
  2. Eu acho que porque os desenvolvedores do Eclipse desenvolvem aplicativos de GUI e eles não precisam de janela do console.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top