Dúvidas e mais dúvidas sobre como distribuir minha aplicação

6 respostas
F

Olá amigos, vocês são minha última salvação até meu suicídio, rs …

Bom falando sério é o seguinte, desenvolvi uma aplicação em Java para desktop, nada muito grande ainda. Uso como SGDB o FIREBIRD ( o drive que uso é o JayBird ). Uso um JFrame com JDesktopPanel, que recebe meus JInternalFrame ´s. Como IDE estou usando o Eclipse. Daí começa minhas dúvidas.

1 --> Dentro do eclipse, quando rodo minha classe principal que contém o método main, tudo maravilha. Faz as consultas, abre o FormPrincipal, tudo na santa paz. Qdo tento rodar no prompt de comando, nada acontece. Dá erro no método main;

2 --> Quando mando o Eclipse, gerar o meu arquivo compactado na extenssão .jar, ele cria bonitinho, sem erro. Quando vou executar a mesma tanto com java -jar, ou com dois cliques sobre o mesmo, dá erro, o mesmo erro no método main.

3 --> Todos os tutoriais que li eu testei, digasse de passagem inúmeros, mas meus conhecimentos não me deixam atingir o resultado que quero.

Vou postar aki para quem estiver proposta a me ajudar que possa tentar resolver esse problema junto comigo pois estou meio desesperado. Tenho um sistema rodando a 9 anos em um cliente e estou reescrevendo o mesmo a 1 ano mais ou menos em JAVA e ainda não tenho grandes progressos para poder migrar o meu sistema antigo.

Outra coisa, minha instalação no meu micro do JSDK está assim:

1 -> Baixei a última versão no site da sun (1.6), instalei ela e mais nada.
2 -> Meu Eclipse está super carregado com os frameworks que ele atualiza sozinho, isso ocorreu porque não tinha conhecimentos e estou estudando a ferramenta a fundo mesmo;
3 -> as telas foram montadas com o V.E. ( Visual Editor ), que não apresenta diferença nenhuma de se eu tivesse feito o mesmo na mão, ao contrário, apenas o utilizei para ter uma maior produtividade.
4 -> Estou usando JDBC para acesso com o Banco, sendo que minha intenção é migrar o mesmo para Linux, por isso e outros motivos não fui para o Hibernate, ainda !!! rs …

Finalmente, a aplicação roda 100% sem erro, sem problema, sem nada, dentro do eclipse. Tento distribuir e não acontece nada …

Minha estrutura de diretório é:

c:
—> Java
—> xFBMaster_JDBC_1
—> Imagens
—> Sistema
—> Telas

------------------------------------ ### Fim ### ------------------

Já tentei criar um lib dentro do xFBMaster_JDBC_1 para dizer pro MANIFEST.MF onde está meu jaybird-2.0.1-full.jar, mas não obtive sucesso. Tentei colocar tudo no mesmo diretório, pasta, e a mesma coisa, sem sucesso. No Eclipse roda normal, fora não.

PS: Não fiz nenhuma alteração de CLASSPATH, pois entendo que qdo instalo a JDK, ela faz tudo que seja necessário ára meu desenvolvimento, e depois a IDE faz o resto. Como na IDE roda, não consigo aceitar que tenho que colocar algo no CLASSPATH. Outra coisa, quando entregar esse projeto para meu cliente, vou entregar e ele não vai ficar me pagando mensalidade nenhuma, só se precisar de mim, e caso seja alguma alteração no sistema, ai eu cobro se for erro meu não, estou dizendo isso, porque o cliente compro minha aplicação, ai ele resolve mudar de computador, eu tenho que ir até lá só para setar valores no CLASSPATH dele ? Acredito que não né ? A JRE é instalada, teoricamente, e digo, na minha cabeça, e só na minha cabeça, acredito que o meu cliente não precisa fazer mais nada, apenas, digamos por exemplo, copiar a minha aplicação para onde ele quizer, como o nome de pasta que ele quizer e começar a trabalhar correto ?

Pessoal desculpa frizar isso, mas que eu procurei muito, fui no site da sun a procura da documentação de JDBC, API, Arquivos JAR, perdi noites acordadndo tentando entender, entendendo, testando, não funcionando e a minha alternativa nesse momento crítico é vocês.

Mais uma coisa, no Eclipse roda 100%, no prompt e com 2 clicks nem abre, já tentei setar CLASSPATH, formatei meu micro, fiz um “regasso”, to no desespero mesmo … Valew, abraços e boas festas a TODOS !!!

Atenciosamente,

Fabinho !!!

6 Respostas

F

Qual erro que ocorre???
Isso está com cara de classpath mal configurada
=]
Abraço.

B

:idea:

Meu amigo não se mate ainda…rs

  1. Para você distribuir a aplicação você irá gerar um .jar de sua aplicação. Porém antes disso você deverá criar um arquivo MANIFEST.MF com o caminho das bibliotecas, geralmente nestes casos as biliotecas são colocadas em um difetório abaixo da aplicação chamado de “lib”.

Modelo do MANIFEST

Manifest-Version: 1.0 Main-Class: gvs.locadora.view.WinPrincipal Class-Path: lib/icones.jar lib/jaybird-full-2.0.1.jar lib/toplink-essentials-agent.jar lib/toplink-essentials.jar

  1. Em main-class coloque a classe com o caminho dos pacotes que contém o método main, conforme no exemplo.

  2. Em Class-Path coloque o caminho + as libs que sua aplicação utiliza, lembrando que é necessário colocar somente bibliotecas de terceiros, que não vem jundo com JRE / JDK.

  3. Coloque o arquivo manifest dentro do diretório META-INFO na raiz do projeto (NomeProjeto/META-INFO/MANIFEST.MF)

  4. Agora para gerar o jar pelo eclipse, clique em cima do projeto com o botão direito, e escolha a opção <Export>

  5. Selecione JAVA/Jar-File, clique em NEXT

  6. Na proxima janela, desmarque os diretórios “lib” e “META-INFO” que estão do lado esquerdo, e desmarque os arquivos classpath e project que estão do lado direito.

  7. Em JarFile, Selecione o locar que o arquivo .jar será criado e deixe os chekbox selecionados com as opções default (já vem selecionado), clique em NEXT

  8. Na proxima janela clique em NEXT

  9. Selecione a opção “Use existing manifest from workspace”, e clique em browser

  10. Selecione o arquivo MANIFEST que está dentro do seu projeto no diretório META-INFO

  11. Clique em finsh e OK, OK

  12. Seu jar foi criado, agora crie um diretório qualquer e “jogue” o mesmo já dentro, neste diretório coloque sua pasta “lib” com as bibliotecas que foram configuradas.

Após isso é só executar o .jar que foi gerado que o mesmo deve aparecer

Não esqueça que no seu cliente é necessário instalar somente o JRE

Acredito que tudo irá funcionar sem que precise configurar o class-path, mais é melhor buscar mais informações, pois acredito que você irá passar por situações que será necessário esta configuração, como por exemplo para usar o iReport é necessário ter o class-path devidamente configurado, como tembém afetuar compilações diretamente pelo prontp de comando $.

Há só mais uma coisa, “Cobre um menssalidade, por mínimo que sejá!”

Um abraço e sucesso.

F

Olá agradeço a todos desde já pela ajuda !!!

Mas é o seguinte, criou meu jar legal, copiei a pasta lib para dentro de um diretório de teste, e está aparecendo um erro assim:

" Could not find the main class. Program will exit. "

Um botão de ok … .rs. … ai clico e ele não abre. Conferi o MANIFEST e está tudo ok, como me falou. Deixei com 1 linha em branco, dá o mesmo erro, e com 2 linhas em branco, e também da o mesmo erro.

O que será ?

Grato pela ajuda novamente, atenciosamente Fabinho !!!

B

Confira a classe que tem o método “public static void main”

Segue modelo

public static void main&#40;String&#91;&#93; args&#41; &#123; SwingUtilities.invokeLater&#40;new Runnable&#40;&#41; &#123; public void run&#40;&#41; &#123; WinPrincipal thisClass = new WinPrincipal&#40;&#41;; thisClass.setDefaultCloseOperation&#40;JFrame.EXIT_ON_CLOSE&#41;; thisClass.setVisible&#40;true&#41;; &#125; &#125;&#41;; &#125;

É normal que tenha algumas dificuldades no início, mais logo verá que tudo é muito simples. Não desista…

F

Olá Gilberto, obrigado novamente pela sua atenção. É o seguinte, conferi minha classe que contém o método main e ela está assim:

package Sistema;


import Telas.FormPrincipal;

public class FBMaster &#123;

	/**
	 * @param args
	 */ 
	

	public static void main&#40;String&#91;&#93; args&#41; &#123;
		new FormPrincipal&#40;&#41;;	

	&#125;

&#125;

Ai gostaria de saber 2 coisas:

1 --> Precisa necessariamente estar como a sua ?

2 --> Trato o setVisible(true), dentro da classe FormPrincipal. Tem aglum problema em fazer isso ?

Estou mantendo meu main dessa maneira, pois ouvi dizer que é melhor do que manter ele dentro de uma classe onde eu trato as telas, campos, etc … Me corrija por favor, mas estou fazendo assim, porque na maior parte do que li é melhor, mas pelo que eu entendo não haveria problema algum de estar dentro do FormPrincipal.

Outra coisa que eu gostaria de lhe dizer é o seguinte, fiz uma aplicação nova, no eclipse, um JFrame, um JButton “Sair”. Exportei ele e ele roda perfeitamente, então estou achando que é algum probelma com algum jar que estou usando. Então revisei meu código e o unico jar q uso fora os da JRE é o JayBird. Se vc quizer eu posto minha apliacação para você verificar. Sem problema algum, mando o Jaybird, o BD e os fontes que tenho … Só queria exportar o meu sistema para jar, para que eu possa demonstrar para meus clientes como está funcionando, para efetuar outros teste tbm …

Desculpe a minha curiosidade mas pq vc disse em cobrar nem q seje uma pequena taxa mensal ? Hoje eu trabalho assim, mas meus clientes acham que eu tenho q resolver até os problemas na rede, nas impressoras, nos computadores pessoais de suas residencias, sendo que meu contrato com eles é apenas de Sistema. Então estava pensando em vender o meu sistema, e ele paga toda vez que precisa de mim se não for problema no meu programa, se for não cobro … Entendeu ? As vezes eu me sinto complicado … espero ter sido claro …

Segue a modificação no código que também não Funcionou:

package Sistema;


import Telas.FormPrincipal;

public class FBMaster &#123;

	/**
	 * @param args
	 */ 
	

	public static void main&#40;String&#91;&#93; args&#41; &#123;
		FormPrincipal formPrincipal = new FormPrincipal&#40;&#41;;
		formPrincipal.setVisible&#40;true&#41;;	

	&#125;

&#125;

Cara mais uma coisa quando eu executo ele no prompt percebi o seguinte erro:

C&#58;\Documents and Settings\FBMASTER\Desktop\testeeeee&gt;java -jar teste.jar
Exception in thread "main" java.lang.NullPointerException
        at javax.swing.ImageIcon.&lt;init&gt;&#40;Unknown Source&#41;
        at Telas.FormPrincipal.getJmManutencao&#40;FormPrincipal.java&#58;255&#41;
        at Telas.FormPrincipal.buildMenus&#40;FormPrincipal.java&#58;118&#41;
        at Telas.FormPrincipal.&lt;init&gt;&#40;FormPrincipal.java&#58;94&#41;
        at Sistema.FBMaster.main&#40;FBMaster.java&#58;14&#41;

Novamente muito obrigado pela sua ajuda …

Atenciosamente, Fabinho …

F

Olá pessoal, voltei para avisar que consegui descobrir o problema. Não sei porque a minha tela principal, FormPrincipal, estava ocasionando o erro das imagens dos icones, ai eu criei outra classe um pouco diferente mas com os mesmo icones, etc e funcionou 100%.

A parte dos Jar rolou 100 % mesmo meu amigo Gilberto. Fico grato a todos que me ajudaram aqui … Sem mais abraços e até o próximo problema ou solução que eu possa estar ajudando alguém …

Abraço a todos, boas festas , Fabinho !!!

Criado 27 de dezembro de 2006
Ultima resposta 30 de dez. de 2006
Respostas 6
Participantes 3