Na realidade isso não tem impacto com Java ser bom ou não para aplicações desktop.
A realidade do Java é a seguinte:
Ele é compilado, porém, não é compilado para código nativo, como acontece com C, C++, Pascal (Delphi), etc… o resultado da compilação é um código intermediario, chamado de bytecode, assim como acontece com .NET, que é compilado para o MSIL (Microsoft Intermediate Language). O bytecode posteriormente é interpretado pela JVM (o MSIL é interpretado pelo JIT do .NET framework). Esses codigos intermediarios (bytecode e MSIL) são códigos binarios, porém muito simples de se realizar uma engenharia reversa, para Java há varias ferramentas que conseguem otimos resultados. Porém, assim como existem ferramentas para descompilar o codigo Java, existem ferramentas, chamadas ofuscadores, capazes de proteger o codigo contra essa engenharia reversa. Tambem é possivel engenharia reversa em .exe, mas é muito mais complexa e os resultados nem sempre são bons.
Então, se isso é um ponto chave no seu projeto, você deveria avaliar um ofuscador, procure alguns e faça o teste. Mas não deixe de avaliar Java em seus projetos por causa disso, pois não é um problema como seu amigo disse, provavelmente ele não conhece bem a plataforma.
Tambem é possivel compilar o Java para codigo nativo atraves de alguns compiladores especiais, mas não é recomendavel pois você perder a portabilidade e as vantagens da JVM.