[Resolvido] Como criar um instalador a partir de um arquivo .jar no netbeans?

Olá galera, sou novo aqui, então peço desculpas se fiz algo errado…
Então, tenho uma aplicação que fiz no Netbeans junto com um servidor de banco de dados MySql. Depois de tudo pronto, agora quero criar um instalador para esse programa, já vi vários tutoriais no youtube, mas nenhum me ajudou a resolver esse meu problema. Tentei utilizar o Inno Setup, mas so que ele não reconhece um arquivo .jar como um executável para iniciar a criação do arquivo .exe. E para alguns que conseguiram, o banco de dados não vai junto com esse instalador. Sou novo no ramo da programação e desculpe se falei algo absurdo!! :smiley:

Ficarei eternamente grato a qualquer um que me der a ajuda possível para eu resolver isso!! Muito obrigado…

Sem mais, Thaian Assis de Moraes

Olá Thaian_Assis

Senão tiver problema em criar um arquivo .exe para chamar seu .jar

Eu já fiz assim:

[list]Crie um arquivo .bat e digite:[/list]

@echo off
start javaw -jar NOME_DO_JAR.jar

[list]Converta seu arquivo .bat para .exe :arrow: Bat To Exe Converte, você tbm pode colocar um ícone com :arrow: icofxsetup.[/list]

[list]Crie um instalador com :arrow: icinst e adicione nele seu .jar, .exe, licença do software, ícone…[/list]

[list]Para levar o script SQL, você poderia fazer a leitura deste arquivo e ir executando query para criar o BD automaticamente. [/list]

flw

Olá Thaian_Assis

Esses dias tambem estava curioso para ver como fazer isso, fiz alguns testes com o Inno Setup e funcionou certinho…tambem peguei um aplicação .jar e com o Inno Setup gerei um instalador .exe.

Não sei se a forma mais certa de fazer isso, mas aqui funcionou…

Henrique, eu vou tentar fazer isso que você falou e depois posto aqui o resultado blza?? E Michell na hora que o Inno pede para procurar o executável do aplicativo, você bota no .jar?? Porque fui tentar fazer isso e ele não acha o arquivo! Mudei de pasta e tudo, mas ele não reconhece o .jar. Daria pra vc me dizer como fez, passo a passo??

[list]Para levar o script SQL, você poderia fazer a leitura deste arquivo e ir executando query para criar o BD automaticamente. [/list]

Eu abri o link mas na página nao tem nada sobre banco de dados!! Me fala mais especificamente onde ta… Obrigado!!

Olá Thaian_Assis

[quote=Thaian_Assis]

Eu abri o link mas na página nao tem nada sobre banco de dados!! Me fala mais especificamente onde ta… Obrigado!![/quote]

É ai que entra a parte legal :smiley:

O link que eu te passei só mostra como [size=24]ler[/size], escrever e criar arquivos, com classes de input/output do Java.

Se você, por exemplo, quer fazer um insert no bando de dados, seria mais ou menos assim:

//Conectar BD
...
 Class.forName("com.mysql.jdbc.Driver");
Connection conexao = DriverManager.getConnection("jdbc:mysql:...");
Statement statement = conexao.createStatement();
...
//Insert
statement.executeUpdate("INSERT INTO...VALUES...");

Bom, você sabe que:

[b]Para o Statement, existem esses dois.
Voce usa executeQuery quando quer que retorne um ResultSet,
quando voce está selecionando dados…
Exemplo “Select * from <tabela>”

E usa executeUpdate quando quer fazer alguma atualizaçao
no banco… [size=24]inserts[/size], deletes, updates, [size=24]create table[/size]…[/b]

Imagine então, você lê um arquivo, linha por linha:

//Leitura de arquivos
BufferedReader leitor = new BufferedReader(new FileReader(new File("SEU_BD.sql").getAbsolutePath()));
//Linha por linha
String linhaAtualSQL;
while ((linhaAtualSQL = leitor.readLine()) != null) {
         System.out.println(linhaAtual);
}

Agora já sabemos como [color=red]conectar-se ao BD, ler um arquivo .sql e executeUpdate com Statement[/color], nesta ordem você pode fazer isto:

//Conectar BD
...
 Class.forName("com.mysql.jdbc.Driver");
Connection conexao = DriverManager.getConnection("jdbc:mysql:...");
Statement statement = conexao.createStatement();
...
//Leitura de arquivos
BufferedReader leitor = new BufferedReader(new FileReader(new File("SEU_BD.sql").getAbsolutePath()));
//Linha por linha
String linhaAtualSQL;
while ((linhaAtualSQL = leitor.readLine()) != null) {
//Aqui considero a parte mais importante e confesso difícil, pois, não basta simplesmente você...
statement.executeUpdate("linhaAtualSQL");
//...antes de executar o update de cada linha SQL lida, você terá que remover espaços em branco, ponto e vírgula (para o Java não confundir como comandos dele), dentre outros tratamento de string, mas nada que alguns .equals(), .trim() e .split() não resolvam.
}

Enfim, você pode até achar (talvez), algo mais o menos com isto de expliquei aqui, pronto na internet, entretando, sugiro que você tente fazer inicialmente sozinho (mas lembre-se qlq dúvida post aqui no GUJ), no final você terá uma classe de “criação de BD automaticamente” bem útil, e o melhor para vários projetos.

Como já disse, há um tempo atrás, fiz algo semelhante a isto, hoje vejo que poderia ter feito mto melhor (em questões de usar menos códigos e deixa-los mais legíveis), daqui um tempo pretendo reescrever está classe (hoje em dia estou correndo atrás de ANDROID e meio sem tempo).

Veja o que você consegue fazer (caso minha sugestão seja útil :smiley: ) e depois post aqui. Boa sorte :smiley:

flw

[quote=InicianteJavaHenrique]Olá Thaian_Assis

Então vou ler direitinho aqui o que voce botou e depois falo o resultado aqui, mas acho que voce nao deve ter entendido a dúvida direito… TIpo ja estou com tudo pronto, conexão com o BD, armazenamento, tudo pronto e funcionando. O negócio que eu quero é poder pegar esse programa e vender ele ou também distribui-lo em outros computadores, na parte de criar o instalador dele eu entendi, mas so como que eu faço pra incluir o BD no programa, como ja está no meu pc onde eu fiz! Entendeu?? Sem ter que em cada pc que eu instalar ter que criar o BD tudo de novo.

E também outra coisa, quando fui criar o instalador do jeito que voce falou, depois que instalei dava um erro de unable to acess jarfile nome_do_jar.jar. Voce sabe por que deu isso?? Obrigado novamente!!

Olá Thaian_Assis é justamente isto que você vai evitar:

Você criou seu banco de dados no MySQL, provavelmente você usou algum programa para criar seu SCRIPT SQL visualmente (apenas dando nome as tabelas e campos) e o programa (como, por exemplo HeidiSQL, fez todos os CREATE, INSERT, UPDATE necessários para você, certo :?:.) Bom, basta agora você gerar seu SCRIPT SQL, (caso seja no HeidiSQL: clique com o botão direito no seu BD :arrow: Export database as SQL :arrow: Habilite os campos Drop e Create e escolha um nome para seu SCRIPT SQL em Filename :arrow: escolha o caminho e salve. Assim ele vai exporta um arquivo .SQL que contém a criação de suas tabelas.

Você vai pegar este arquivo .SQL e vai colocá-lo junto com o seu pacote de instalação do software, quando seu sistema inicializar, ele vai tentar conectar ao BD, logo este (banco de dados) não irá existir no computador do seu cliente. [color=red]O Java irá lançar um exceção ao ver que não existe o BD[/color], então seu sistema vai procurar na pasta que ele está instalado (exemplo, C:\Arquivos de programas\Seu Software o SEU_SCRIPT_PARA_CRIÇÃO_DO_BD_E_TABELAS.sql e fazer isto:

Entendeu :?: cada pessoa que tiver seu sistema vai guarda os dados importantes para ela, exemplo,SEU_SCRIPT_PARA_CRIÇÃO_DO_BD_E_TABELAS.sql criou:

[b]BD_Empresas

TB_Fornecedores

ID_Fornecedor

NM_Fornecedor

DS_Fornecedor[/b]

No sistema (que você fez e eu comprei) vou guarda:

BD_Empresas

TB_Fornecedores:

ID_Fornecedor:1

NM_Fornecedor:Henrique

DS_Fornecedor:São Vicente

No sistema (que você fez e o João comprou) ele vai guarda:

BD_Empresas

TB_Fornecedores:

ID_Fornecedor:1

NM_Fornecedor:João

DS_Fornecedor:Rio de Janeiro

Porém, a base de dados…

[b]BD_Empresas

TB_Fornecedores

ID_Fornecedor

NM_Fornecedor

DS_Fornecedor[/b]

…é igual para mim, para o João, para os demais compradores de seu software. Entretanto, está base de dados foi criada automaticamente e igual para todos nós (compradores) pelo seu sistema.

Beleza cara, muito obrigado vou reunir tudo que você falou e vou tentar fazer, [color=red]desde já agradeço muito pela sua ajuda!![/color] Quanto ao que você falou sobre o script_sql, não foi esse procedimento por programas, foi no braço mesmo, digitando e criando tabela por tabela!! Pelo MySQL server, com aquela telinha preta do DOS!! kkkkk… Só programando!

Melhor ainda, assim você já tem o seu SCRIPT SQL :smiley:

Você criou o arquivo .bat e converteu para .exe :?: porque este .exe será o seu arquivo principal na escolha durante a instalação. Este erro de [color=red]incapaz de acesso[/color] é, provavelmente, porque você não definiu o .exe como principal.

E como eu faço isso, botar como principal? pq eu converti deu tudo certo, mas eu criei o setup com o inno msm não usei o prog que voce falou, mas dessa vez vou tentar com ele!! Não teria como voce me passar um tuto desse que vc me falou?

E cara agora surgiu também outra coisa, no prog é cheio de ícones nos botoes e o meu maior problema é quando ainda no netbeans passo o arquivo pra outro pc que tb tem o netbeans só que os ícones não vao, por causa do caminho que vai ser diferente. Ex: No meu está em C:/Users/\Thaian\Documents\NetBeansProjects\Corporation\Documento2.png
Ai quando mudar de pc, não vai ser esse mesmo endereço, ai como que eu faço? Tenho que armazenar no BD também?

Definir como principal, só foi um modo de falar, que quer dizer: "Escolher o arquivo .exe (que vc criou com o Bat To Exe Converte) na hora que o icinst pede seu programa .exe. Mas, lembre-se este arquivo .exe só vai funcionar como atalho para chamar o seu .jar na pasta de instalação (C:\Arquivos de programas…)

Mas tudo isto que eu estou falando é para o ICINST, não sei como funciona este INNO (nunca usei :smiley: )

Instala o ICINST, é fácil, rápido e ocupa pouco espaço, então vc verá que ele é auto explicativo (in english very very basic).

flw :thumbup:

[quote=Thaian_Assis]…no prog é cheio de ícones nos botoes e o meu maior problema é quando ainda no netbeans passo o arquivo pra outro pc que tb tem o netbeans só que os ícones não vao, por causa do caminho que vai ser diferente. Ex: No meu está em C:/Users/\Thaian\Documents\NetBeansProjects\Corporation\Documento2.png
Ai quando mudar de pc, não vai ser esse mesmo endereço, ai como que eu faço?[/quote]

Eu faço isto…

java.net.URL img = getClass().getResource("imagem.png");

…o código acima busca a imagem na pasta principal do seu projeto, depois para usá-la, faça assim (exemplo)…

new JMenuItem("Novo", new ImageIcon(imagem));

No BD guarde o caminho das imagens que seu usuário final escolher.

flw :thumbup:

Ei valeu ai Henrique!! Você me ajudou muito com isso, e quando escrevi aqui pensava que não teria nem resposta! Obrigado mesmo!! :smiley:

De nada :smiley:

Se o seu tópico foi respondido e você está satisfeito, segue:

  • Pressione o botão <Edit> de seu primeiro post
  • Acrescente no final do título a tag [RESOLVIDO]

flw :thumbup: