Quais são as desvantagens da estrutura da GUI do Java Swing? [fechadas]

11

Eu usei o Java Swing para alguns aplicativos de desktop. Mas eu não usei muito outras estruturas de GUI, então não posso compará-las.

Definitivamente, existem algumas coisas que eu gosto no Swing e outras que não, mas essa é a situação com quase tudo.

Quais são as maiores desvantagens da estrutura da GUI do Java Swing?

Jonas
fonte
2
A questão é interessante. Também me pergunto quais são os pontos fortes e fracos do Swing, em comparação com QT, GTK, SWT, Winforms, Cocoa e similares. Talvez você deve reformular o título para pedir comparações , ao invés de inconvenientes (que tendem a trazer respostas não bem fundamentada)
Barjak

Respostas:

3
  1. Você precisa ter o java instalado em algum lugar. Isso é verdade para todas as estruturas da GUI, é claro, mas o java tem a percepção de um gorila de 2 toneladas. Ele ficou muito melhor, mas aqueles primeiros dias de applets java deixaram muitas pessoas desapontadas. Se você precisar apenas executar o seu aplicativo, há muita manutenção para mantê-lo atualizado com patches de segurança e similares. Todo mundo precisa ter o Flash para o youtube, o .Net framework é instalado nos bastidores e todo mundo tem o javascript ativado no navegador. Java é geralmente uma coisa extra a se fazer.

  2. Embora seja meio que escreva uma vez, execute em qualquer lugar, você ainda acha que o Mac OSX não tem essa coisa nova que você deseja usar ou que um cliente se recusa a atualizar seu mandrake linux após o JRE 1.4.

  3. Como desenvolvedor, você precisa pensar em segmentação. E é de uma maneira complicada, pois a multi-threading é possível, mas o swing finge que tudo é de thread único. Porém, metade das bibliotecas que você utiliza possui algum grau de multi-threading e assume que você conhece o invokeLater EDT e isso força muitas lições da maneira mais difícil.

  4. A experiência de swing não se transfere facilmente para outros tipos de desenvolvimento de interface do usuário. Por exemplo, se você é um gênio nas tabelas em .css, será completamente enganado por Jtables, renderizadores, editores etc.

Em geral, o principal problema com o Swing é que ele não fez jus à forma como foi comercializado. É uma tecnologia perfeitamente adequada para muitos casos de uso, mas os primeiros 5 ou 6 anos foram repletos de implementações terríveis e applets atrozes. E agora é tecnologia antiga - na Web 3.0 ou o que for.

Tudo isso dito, eu gosto do Swing e acho que os profissionais geralmente superam os contras quando você precisa do que ele oferece. No entanto, a experiência na Web é tão onipresente agora que muitos usuários terão mais facilidade com um aplicativo da Web do que o aplicativo swing mais incrível. E existem aplicativos Swing incríveis por aí, mas eles não parecem ser populares.

Steve Jackson
fonte
11
Estou na mesma situação que o OP: conheço Swing e estou interessado em compará-lo com outras capturas de tela da GUI. Para mim, os pontos 1, 2 e 4 são irrelevantes para a questão. Então, gostaria de reagir ao ponto 3: você poderia dar alguns exemplos de kits de ferramentas da GUI multithread, por favor? Obrigado.
Barjak
2
@ Barjak: GUI multithread é um erro. O único que eu conheço é o antigo Java AWT. Mas eles aprenderam com os erros ao projetar o Swing, que é único como todas as estruturas modernas da GUI.
Jonas
@Jonas Fazer um desenvolvedor pensar em multithreading geralmente é um erro, mas você não pode executar animações, fazer chamadas RMI ou fazer cálculos intensos (este é um kit de ferramentas para clientes gordos, lembre-se) sem algum grau de multithreading.
9788 Steve Jackson
3
@ Steve: Isso é verdade. Mas você não deve fazer chamadas RMI e cálculos intensos no thread da GUI. Esse tipo de coisa deve ser feita em um encadeamento em segundo plano, como no Swing e no WPF.
Jonas
@barjak - Formulários do Windows, MFC, SWT, pyQT, Juce .... Estou tendo mais dificuldade para pensar naqueles que não são multiencadeados. As mesmas regras geralmente se aplicam, porém, você não pode tocar nos componentes da GUI, exceto no encadeamento que os criou.
Steve Jackson
2

Jonas,

O Swing generaliza sua arquitetura subjacente para fornecer uma experiência de usuário neutra à plataforma. O único componente pesado (fornecido pelo sistema operacional) é o contêiner JFrame e o restante é praticamente manipulado pelo Swingit. O AWT, por outro lado, pede ao sistema operacional para desenhar todos os seus componentes da interface do usuário, o que significa que é mais rápido de várias maneiras, pois você usa os componentes da interface do usuário nativos específicos para o sistema operacional. O SWT tenta alcançar um meio termo, para vários componentes padrão, como botões e etiquetas (que estão disponíveis na maioria dos sistemas operacionais), permite que o sistema operacional lide com eles e para outros componentes especializados, o SWT cuidará da criação para você.

Dito isto, posso descrever os inconvenientes.

(1) Como o kit de ferramentas cria e renderiza os componentes para você, em vez de solicitar ao sistema operacional, você não aproveita a velocidade dos componentes internos fornecidos pelo sistema operacional.

(2) A interface do usuário não é particularmente atrativa, pois parece estranha para a maioria das plataformas de sistema operacional em relação à aparência e ao uso que você usa.

(3) Alguns dos gerenciadores de layout, como GridBadLayout etc., poderiam ser mais simplificados. Eu perdi a conta do número de projetos em que trabalhei onde as pessoas envolveram o GridBagLayout em algum código personalizado para obter uma maneira mais simples de usá-lo.

Eu recomendo que você escreva um aplicativo simples no AWT, Swing e SWT e compare as abordagens de desenvolvimento e o produto final entre todos eles, depois revise os vários comentários feitos por outros desenvolvedores e decida qual deles funciona melhor. Eu trabalho com o Swing há muitos anos e costumava não gostar do SWT, mas percebi que o Swing é muito mais complicado do que precisa quando comparado a outras estruturas existentes.

Desolate Planet
fonte
4
O Swing é acelerado por GPU , que estruturas nativas não costumam ser, então eu acho que o Swing é mais rápido. Essa também é a estratégia que o WPF no Windows possui, mas não o WinForms (apenas em algumas versões do Windows). Como pode "[feio] ... o que parece e o que você usa" ser verdadeiro quando é muito personalizável ou você pode usar o LaF da própria plataforma? Concordo que os gerentes de layout são muito ruins.
Jonas
Jonas, é o aspecto "personalizável" do swing que o torna complicado em comparação com outros frameworks. Se você tentar abstrair-se dos recursos que o sistema operacional oferece, perderá muitos dos benefícios que ele oferece. A primeira versão do Swing foi um pesadelo, o que levou à criação do SWT em primeiro lugar. Posteriormente, o Swing foi aprimorado para ser muito mais rápido e você tem classes como o SwingUtilities que oferecem melhor suporte de segmentação para GUIs.
Desolate Planet
Feio pode ser a palavra errada; alienígena pode ser uma palavra melhor, já que aparência e aparência não é exatamente a mesma que a aparência nativa da interface do usuário. Pelo que me lembro, você tem Java, motivo, metal e alguns outros, mas, em geral, eles não são ' tudo tão bonito.
Desolate Planet
A próxima coisa a considerar ao fazer uma comparação é o esforço envolvido no desenvolvimento de uma interface do usuário. Eu não diria que os gerenciadores de layout são realmente ruins, é melhor que nenhum layout (com o qual eu tenho que lidar no trabalho em um dispositivo móvel), mas eles não fazem nenhum esforço para simplificar o modelo.
Desolate Planet
Acho que, com base no que você disse, você está usando a versão mais recente do Swing, mas, quando foi lançada, as pessoas tinham uma forte aversão a ele e, ainda mais, quando tentavam fornecer applets baseados no Swing. Há muita história nas estruturas de interface do usuário desenvolvidas em Java e é uma leitura interessante se você olhar para ela.
Desolate Planet
-2

O swing é lento (desempenho ruim), difícil / desajeitado de usar (em comparação com muitos outros) e não parece muito bom, de fato muito ruim, em algumas plataformas.

Anto
fonte
5
Acho que é rápido (tem aceleração de GPU, em comparação com muitas GUIs nativas), então não posso concordar com o desempenho ou você tem exemplos? Como é difícil e desajeitado em comparação com outras estruturas? Concordo que não parece bom, mas pode ser configurado para se parecer com aplicativos nativos ou usar um LaF personalizado.
Jonas
Parece mais ou menos sempre não nativo no GTK. O que ouvi é que, como se baseia no Java 2D para desenhar widgets, é lento, mas não tenho nada para provar isso. Tanto o Qt quanto o GTK parecem menos desajeitados para mim, mas os gostos diferem.
Anto
Ah, pode ter um desempenho pior em algumas plataformas. Eu o usei apenas no Windows, onde é acelerado por GPU e muito rápido.
Jonas
6
As pessoas ainda reclamam que algo não parece nativo, enquanto usam mais e mais coisas do navegador (pense: stackexchange), onde cada página parece diferente? E velocidade? Na maioria das vezes, um programa GUI interativo está aguardando o usuário.
usuário desconhecido
2
A maioria dos programas "modernos" não parece mais nativa. Swing acaba nem melhor nem pior a esse respeito. O desempenho do nosso aplicativo de swing de 50kloc (cliente gordo) parece bom. Muito mais fácil chegar ao ponto de não travar do que aplicativos "nativos".
Tim Williscroft