Onde Java é mais indicado que .Net e vice-versa?

Seu argumento é falacioso. O fato do acesso a código nativo no Java ser tão complexo
só causa problemas até hoje para a plataforma - o contrário está longe de ser verdade.

Java é até hoje o patinho feito quando o assunto é, por exemplo, escrever uma aplicação integrada
ao desktop. Enquanto o AWT foi um enorme fracasso, o Swing tomou proporções épicas. Enquanto com
a CLR é possível fazer o binding de uma API escrita com C em poucos minutos, com Java leva uma semana.

Só comparar, por exemplo, os bindings para QT, KDE, GNOME e GTK+ para Java e Mono. Os do Java são
continuam uma piada. E a Java-ObjC bridge? Uma porcaria. Para o Mono existem 4 projetos distintos de binding.

Porém isso não se limita a aplicações desktop. Embutir Java dentro de outras aplicações é um sofrimento tão grande
por conta do JNI que ninguém mais tenta.

Essa atitude altista por parte da Sun limitou em muito o alcance da plataforma de forma que hoje é basicamente financeiramente
inviável inovar com ela. Basta ver que as principais plataformas lançadas nos últimos 3 anos (PS3, XBOX360, Wii, iPhone) não existe
nem sinal de rodarem Java.

Por fim, argumentar que essa decisão foi tomada pensando no melhor para os desenvolvedores pois alguns poderiam abusar disso é
muita condescendência, infantilização, mas também tratá-los por estúpidos. Foi uma decisão errada e o Stanford Ego prevaleceu.

No mercado desktop, o java sempre ficou atrás do VB, do delphi, do C, do C++ e de outras linguagens. Não sei como é o caso do C# / .NET, mas acredito que estão muito mais a frente que o java.

O que acontece é que criar interfaces visuais no java é uma tarefa árdua e muito mais trabalhosa que em qualquer outra linguagem, principalmente por conta daqueles gerenciadores de layout pobres, pouco usáveis e non-sense. Há ferramentas e APIs de terceiros por aí que deixam esse trabalho mais tranquilo, mas mesmo assim é muito mais fácil fazer em VB ou delphi.

Não obstante, a API do swing não está entre as melhores. Cheio de regras estranhas e desnecessariamente complicadas que são produto de uma especificação mal-planejada (ex: setar o foco, JTable, usar a Event-Dispatch-Thread corretamente). Há vários métodos que deveriam ser privados, mas estão expostos como públicos, há uso excessivo de herança, o que deixa a documentação difícil de entender e a API difícil de aprender. Além disso, boa parte dos mitos dos java (ex: “java é lento” e “java é uma linguagem cheia de frescuras”) tem certa parcela de culpa no swing. Ainda mais que só no java 5 é que o swing começou a ter uma performance decente. Curiosamente a performance no java 6 é em geral superior ao do delphi, mas o java demorou demais para conseguir isso. Quanto a parte das frescuras, é tanta regra e restrição idiota, que sem dúvida dá para dizer com plena convicção de que o swing é cheio de frescuras.

Eu acredito que se a API do swing e do AWT fosse mais bem planejada e principalmente, mais fácil de ser usada e aprendida, hoje o pessoal estaria falando de VB e delphi da mesma forma que falariam do clipper.

Recentemente chegou o JavaFX para tentar salvar a situação, vamos torcer.

No entanto, apesar disso, o swing ainda tem algum espaço no mercado, pouco mas tem. Eu pessoalmente já trabalhei em três projetos comerciais sérios usando swing, de 2006 para cá.

Olha discordo, tem muitos sistemas Desktops em empresas que são desenvolvidos com Java, em cima deles tem a opção de migrar para a web, sem perder o que foi feito, mas assim Java e .Net podem ser usado em ambos os casos, mas na área de celulares e Palms, acho que Java leva vantagem, um pouco…
Como foi dito anteriormente, depende do projeto…
:wink:

Deixa ver se entendi, voce credita o sucesso dessas plataformas à sua linguagem? Agora estou curioso, qual seria entao a linguagem responsavel pelo sucesso do windows por exemplo? :twisted:

Atualmente eu acho que a linguagem adotada por cada plataforma teve uma influencia muito baixa, pra nao dizer nenhuma, no sucesso da mesma.

Mas falando de plataformas, curiosamente, hoje vi a Sun anunciando uma Java App Store para a maior plataforma de executacao de aplicacoes que existe, o Windows!

Segue o link:
http://blogs.sun.com/jonathan/entry/will_java_be_the_world

Se for verdade, é um ponto a mais pro Java em relacao ao seu concorrente tradicional.

Tem razão. Vem sendo um sacrifício enorme desenvolver determinadas aplicações, em conjunto com a engenharia eletrica, justamente por causa da dificuldade do jni. Como foi dito num post, existe o recurso do jna. Mas mesmo assim, ainda complica em relação ao pinvoke c#. A equipe da sun deveria rever alguns recursos da linguagem realmente.
Eu até desejaria um byte não sinalizado. Mas é uma opinião pessoal.

Não disse isso. Nem por sofismo teria como chegar nessa sua conclusão. O fato é, Java é um fracasso nestas plataformas e por que elas fazem sucesso realmente não importa. Java, como plataforma, está cada vez mais se entrincheirando e virando nichos.