Tenho experiência em Swing de 8 anos, mas a algum tempo andei lendo que com o Java 9 o Swing será totalmente abandonado pela Oracle. Agora surgiu a necessidade de eu desenvolver um sistema Desktop para um cliente e me veio algumas dúvidas.
Minhas dúvida são as seguintes:
A JVM deixará de rodar os programas desenvolvidos em Swing/AWT ?
A JDK irá possuir apenas o Toolkit para desenvolvimento JavaFX ?
O JavaFX realmente é ideal para desenvolvimento Desktop visto que o grande feeling dele eh RIA ?
Iniciei o estudo de JavaFX recentemente e realmente é muito bom. Uma complicação para o aprendizado ainda é a falta de exemplo na net. Inicialmente é difícil de criar as telas por arquivos FXML, mas é muito tranquilo.
te indico esse tutorial, não aborda tudo, mas é excelente
Qualquer tipo de aplicativo na plataforma Java é longe de ser a melhor solução para desktop.
Andrauss4 likes
Trabalho a algum tempo com sistemas ERP desktop sempre com Java e não vejo desvantagens. Sobre o JavaFX é uma tecnologia excelente eu já usei em alguns projetos recentes e nos novos sempre vou usá-lo.
fernandopaiva5 likes
Sempre detonando o Java para Desktop …kkk !
Já devo ter visto uns 1000 posts do @javaflex aqui no GUJ falando sobre o quanto Java não é recomendado para Desktop e o quanto desenvolver em RIA não é o ideal.
Se bem me lembro ateh participei de algumas discussões.
Eu desenvolvo em Java para Desktop pois tenho mais familiaridade e penso em portabilidade, poderia fazer em C++ ou até mesmo em Lazarus mas meu negócio eh Java. E nunca tive problemas em desenvolver em Java para Desktop.
Alguns sistemas Desktop que fiz usando Java.
IguanaBar
SysFighter
abraço !
Andrauss9 likes
Último sistema que desenvolvi com JavaFx, sincronizador de apps.
Valeu, usei algumas biblotecas e estilos de terceiros, como esse CSS estilo Metro W8.
gbrvalerio3 likes
Queria ter criatividade pra design hahahaha meus projetos parecem que foram feitos pra qquem usa Win97 achar bonito
Andrauss1 like
Rs, nesse caso eu só usei o CSS do link se não não ficaria assim, mas é isso o JavaFx dá muitas opções de personalização pra um sistema.
K
Kevyn_Marinho
Os meus também! sou péssimo nisso…
javaflex1 like
Falavam o mesmo de mim quando anos atrás criticava JSF, onde quem me ouviu não caiu em furada. Eu só quero ajudar.
fernandopaiva
@javaflex uando vc fala que JSF eh furada diz em relação a mercado ou a desenvolvimento ? E quais os motivos de ser furada ?
javaflex
Por consequência os dois. Os motivos estão no histórico, é um assunto extenso e fora do tópico. Pode até mesmo pesquisar sobre as desvantagens graves dele. Lembrando que não é só eu que critico. O fato é que hoje está caindo a adoção, isso já explica muita coisa.
O que predomina para sistemas de informações hoje são aplicações web. Aplicações desktop é mais para ferramentas, softwares de edição e quando a necessidade do módulo do sistema é acessar recursos nativos que não sejam possíveis via navegador. Com Swing ou JavaFx, acessar recurso nativo é mais complicado do que C# ou C++ por exemplo, o que acaba sendo mesmo uma das piores escolhas para desktop, não que deixe de ser uma opção.
getAdicted
Obrigado por compartilhar Krismorte, excelente material!!
quebrado
hahahaha Ficou bem louco. Parabéns!
Agora podemos fazer aplicações desktop muito melhores que o velho swing.
j-menezes1 like
Essa e’ a sua opinião.
Facilidade ou dificuldade em java para desktop depende da pratica e do conhecimento de cada um.
j-menezes1 like
Eu tambem tenho larga experiencia em desenvolvimento com swing, e tenho usado JavaFx para desktop, simplesmente d+. tem coisas nele que farão você ficar de joelhos.
JeanJavaMan
javaFX é vida kkkk adoro d++, trabalhei com swing desde do tempo da facul, depois que conheci o javaFX e entendi como funciona, passei a amar ele
javaflex
Desde quando é mais facil aproveitar recursos nativos numa tecnologia multiplataforma?
Krismorte
Aproveitando o post aqui. Qual a melhor forma de se trabalhar com JavaFX. Digo isso, pois estou começando agora e tive certa dificuldade em passar valores entre telas e repetição de código.
Então criei uma camada de Interface para implementar as telas e alguns comportamentos. Alguém tem uma forma mais pratica ou é isso mesmo?
gbrvalerio
tem um projeto que eu to desenvolvendo em javafx atualmente e tem vários tipos de passagem de valores que eu consigo usar, desde passagem por argumento no construtor a passagem por evento customizado. Quiser dar uma olhada: https://github.com/gbrvalerio/LanComm
Jesuino_Master3 likes
JavaFX é realidade e é muito usado. Inclusive tem app brasileira em destaque no mundo, veja:
Sério mesmo, javaflex? Então escreva algo que rode (bem e de forma uniforme) para osx, linux e windows, que não seja java. Mantenho alguns projetos java swing a 8 anos, nem eu nem meus clientes concordamos com tua idéia. Exisiram dificuldades para fazer o tuning dos aplicativos, no início, mas depois rodam muito bem.
sigma2k
Dê uma olhada neste projeto, que integra spring com javafx.
Estou começando agora na plataforma e usei este como base para entender a passagem de informações entre telas.
sigma2k
Se você precisa acessar recursos nativos da plataforma, use C ou C++. E teu sistema fica preso nesta plataforma. Talvez a maior vantagem do Java é ser multiplataforma, se você não precisa disso, use outra linguagem.
ViniGodoy2 likes
Eu concordo com o @javaflex . Trabalho primariamente com aplicações desktop e o Java deixa a desejar em muitos aspectos. Componentes antigos, acesso difícil ao sistema operacional, difícil de usar aceleração gráfica, etc. Há a desvantagem do processo da instalação da VM também ser traumático e não esconder do usuário que ele saiba exatamente que versão está usando. Sem falar que não há qualquer proteção ao código fonte, se usar Java, seu aplicativo será Open Source.
Sigma2k, em QT é facílimo fazer aplicações que rodam de muito bem e de maneira uniforme em todas as plataformas que você citou e ainda incluir plataformas mobile e embedded, que o Java não suporta. É menos uniforme do que o Java pois ele ainda respeita os idiomas comuns de cada SO - o que é uma grande vantagem.
Sério, vocês provavelmente só defendem o Java porque nunca pararam para desenvolver a sério em outra plataforma melhor. Ou porque nunca desenvolveram aplicações desktop que exigem um pouquinho mais de integração ou multimídia. Que, diga-se de passagem, são coisas extremamente comuns para quem trabalha com desktop a sério.
ViniGodoy2 likes
sigma2k, não necessariamente. Você pode querer acessar recursos como a aceleração gráfica em OpenGL, acesso a portas USB ou interfaces seriais, e outros recursos bem encapsulados e que o Java não dá qualquer suporte.
Você também pode fazer com que sua aplicação rode melhor em um determinado SO (como por exemplo, o Windows) e prover mecanismos menos interessantes para as demais plataformas. Um exemplo muito comum disso é permitir que, caso o aplicativo esteja instalado no Windows, a autenticação seja integrada ao IIS.
De qualquer forma, é muito comum que desenvolvimento desktop não seja multiplataforma, ou que tenha restrições de tempo real. Pontos onde a fragilidade do Java é evidente. Se você vai trabalhar com todas as restrições que o Java fornece em nome do multiplataforma, pergunte-se se sua aplicação precisa mesmo ser desktop. Provavelmente será mais vantajoso faze-la em web.
sigma2k
Concordo contigo, Vini. Tenho um app que precisa usar recursos de processamento ao máimo, onde java se mostrou muito rápido, até comparado a C e C++. Neste caso específico, com multithread para processamento, web seria um problema, uma requisição usaria todo o processamento do servidor. Por isso a necessidade de ser desktop. Vejo que não existe uma receita genérica, temos que avaliar os requisitos do sistema para tomar a melhor decisão. E gostaria de te agradecer, muito do que conheço hoje se deve aos conhecimentos que você compartilhou.
pfk66
Se sua aplicação não é uma ferramenta, ou um software que envolve criação, ou não acessa recurso nativo nenhum, é porque sua aplicação possui pouco valor agregado.
fernandopaiva
Sobre usar OpenGL etc…Não é para criação de games nem muito menos integração de midias, eh apenas um sistema comercial que acredito seja a real proposta do antigo Swing e do novo JavaFX.
Sobre a proteção do código @ViniGodoy eu tenho um programa que protege o código gerando o exe através do .jar que eh o Excelsior: http://www.excelsiorjet.com/
Esse JavaFX é muito legal, eu como ja conhecia e trabalhei com Swing foi fácil aprender e ainda essa estrutura de usar FXML com Controllers lembra muito JSF e Android(nativo), o que facilitou mais ainda.
No momento eu preciso criar um software que emita o SAT-CF-E e tbm ECF e que tbm imprima em impressoras de cupom na rede, eh basicamente uma frente de caixa. Acredito que com Java será tranquilo fazer, mas ja me sugerirão usar o C# ou C++ ou até mesmo o Lazarus.
Nunca criei um sistema que emita ECF ou esse novo SAT-CF-E, então gostaria da opinião de vocês se realmente minha idéia de usar Java seria uma boa ?
javaflex
Isso é relativo, aplicações web que cito não são softwares a serem vendidos, mas aplicações com soluções bem específicas que agregam valor para o negócio de forma estratégica, onde a atividade fim não é TI.
Mas concordo no que você falou considerando uma aplicação desktop que não usa recurso nativo, já que a maior razão de ser fazer aplicação desktop hoje em dia é acessar recurso não disponível por HTML.
pfk661 like
Acho que esta falando de soluções customizadas para um cliente específico, software sob encomenda. Mas como isso pode PREDOMINAR em relação a por exemplo um jogo, ou ferramenta para músicos, ou qualquer outro nicho que possui audiência global? Certamente existem muito mais jogadores e músicos no mundo para você vender seu software do que clientes potenciais para uma solução customizada.
javaflex
Não entendi porque tenta confrontar produto com serviço customizado, são casos diferentes. Cada um escolhe o tipo de oportunidade que deseja trabalhar.
ViniGodoy
Nossa, você conseguiu pagar pelas licenças do Excelsior?!?!?! São 3.000 dólares por plataforma! =O
Se seu software é simples, tanto faz a linguagem. Use a que você tem mais familiaridade. O fato de dizer que o Java seja a pior alternativa para desktop não significa dizer que ele não seja uma alternativa. Só que, para muitas e muitas e muitas aplicações desktop, o Java dará muito trabalho a toa. Os exemplos são os que falei: exigir algum tipo de integração com o SO (para autenticação, uso de hardware, etc), exigir tempo real, exigir uso de bibliotecas exóticas (que são muito comuns em C, mas raras em Java), ou exigir acesso a multimídia.
Para o feijão com arroz, você pode resolver com praticamente qualquer coisa: python, Java, C++, C#, etc…
fernandopaiva
kkkkk…eh cara mesmo @ViniGodoy mas eu consegui um esquema com eles que saiu bemmm mais barato. Claro, não comprei o master pelo fato de ser esse valor que você disse mas paguei 700 reais quando comprei.
Sobre o desenvolvimento do sistema andei dando uma olhada no C# e gostei bastante, inclusive percebi que tem como usar frameworks para persistência que é o que me fazia mais resistente ao uso pois eu não sou fã de ficar escrevendo SQL, ja fiz muito isso na vida e depois que comecei a trabalhar com Java e usar Hibernate ou EclipseLink abandonei de vez o SQL.
Mesmo eu tendo mais familiaridade com Java vou partir para o desenvolvimento C# para este sistema em específico, afinal, o C# é uma cópia do Java então quanto a linguagem em si acredito que não terei muita dificuldade.
Muito obrigado por sua atenção.
jeff0211 like
Fernando gosto muito de programação descktop, gostei bastante do JavaFx por uma serie de coisas mas tbm fico pensando se poderia migrar para C# pois todo mundo fala que para descktop C# e de longe a melhor escolha do que java.
fernandopaiva1 like
Então @jeff021 eu ja estou estudando o desenvolvimento do C# usando Windows Form, eh bem simples mesmo e tem muitas opções de componentes, me lembrou o Delphi e o VB.
Agora estou estudando qual framework ORM de persistencia irei usar, se uso o EF ou o NHibernate, nesta parte do uso de Frameworks ORM estou achando meio complicado, acredito que seja pq estou acostumado com Java e as coisas fluem mais facilmente, mas minha primeira impressão é que é bem complicado o uso de ORM no C#, mas vou seguir estudando.
[]s
jeff0211 like
Show a respeito do C# tem o WPF que e bastante parecido com a mecânica do FXML do JavaFX. Acho que o WPF meio que substituiu Windows Forms. Mas e isso ai tomará que vc consiga ter um desempenho bacana nessa jornada. Pois vi sua qualidade de serviço nos 2 videos que vc colocou acima no post e realmente vc e muito bom e bastante detalhista. Parabéns!!!
Legal ver mas pessoas que gostam bastante de programação Desktop.
T
tr.andreluis
@ViniGodoy Quando você diz que programar pra desktop com Java torna seu projeto open source, o que realmente quer dizer? Eu não conheço muito sobre, mas tem como pegar um código de um .jar por exemplo?
ViniGodoy1 like
Sim, baixe o java decompiler e você vai ver que um jar vira código 100% legível.
Aliás, um .jar nada mais é do que um zip cheio de .class dentro.
T
tr.andreluis
Valeu, obrigado!
T
tr.andreluis
@ViniGodoy Ainda sobre isso, pesquisei e vi que existem algumas técnicas de ofuscamento de código e outras coisas, mas não há algo muito certo. Que técnica/ferramenta você indicaria para que mesmo desenvolvendo minha aplicação com java, ainda assim conseguisse proteger meu código fonte? Pode não ser uma técnica 100% confiável (e quais coisas são 100%, não é?) mas algo que me desse uma maior segurança para proteger meu software.
ViniGodoy2 likes
Ofuscar o código. Isso vai impedir que um turista simplesmente o descompile e leia. Nada que alguém com um bocado de tempo e paciência não possa fazer.
O ideal seria também baixar os fontes de todas as bibliotecas externas o ofuscar TUUUUDO. Senão as chamadas de código a elas tornarão o trabalho mais fácil.
Agora, se seu objetivo é proteger o mecanismo para impedir pirataria, esquece. Alguém pode simplesmente se concentrar nessa parte específica do código. O cara que descompila ainda pode usar o depurador.
Nada é 100% seguro mesmo, mas pode ser 70% ao invés de 7%. Se realmente for importante pra empresa evitar isso em seu produto, não iria facilitar demais as coisas usando Java ou .NET, usaria C++ nativo por exemplo.
ViniGodoy1 like
Tente reverter um código c++ compilado com otimização o3, você vai ver que o resultado sai muito distante do código original é ilegível. O c++ não guarda a estrutura ou muitos símbolos, pois não tem reflection. Além disso, boa parte das funcionalidades do C++ são implementadas com templates, que geram código antes de compilar.
Esse descompilador pode ser pra o .Net. O .exe do .net é só um programinha que dispara a vm da Microsoft e envia o bytecode (que fica dentro do exe) para lá.
fventurajr
Acho curioso alguém defender o uso de C++ para software comercial. Se fosse software básico ainda vá lá.