Software em Java se tornar uma sugestão a abrir determiando tipo de arquivo no SO.[RESOLVIDO]

Boa tarde comunidade, estou trabalhando em um projeto de um bloco de notas em java que abra arquivos txt e outros. O problema é que eu queria uma forma de fazer meu programa aparecer entre as sugestões do sistema para ser o programa padrão para abrir arquivos txt, e no caso do usuário desejar que seja padrão, o clique duplo no arquivo leve a um método do programa que receba o endereço do arquivo e abra com este arquivo. Alguém sabe de uma maneira de fazer? Grato aos que responderem.

Abra uma linha de comando e digite os seguintes comandos:

assoc /?

ftype /?

Leia a informação que eles mostram.

Acho que desde o Java 1.6 todos os jar são marcados para abrir com o java.exe por padrão.

Então você precisa distribuir sua app em jar e no windows explorer, ferramentas, opções de pasta alterar o .txt do notepad pro seu jar.

Acho que isso resolve de maneira manual.

Funcionando, é possível automatizar a seleção como default, alterando o registro do windows.

No seu jar, precisa setar o parametro main-class no manifest dentro da pasta meta-inf

Ao escolher a opção exportar em um projeto no eclipse, essas opções são sugeridas.

Para fazer isso no windows é necessário adicionar determinadas chaves no registro. Você pode fazer isso via um script de instalação ou mexendo registro manualmente (não sei se existe alguma biblioteca do java para manipular o registro diretamente). Para isso execute as seguintes Operações.

  1. Abra a chave HKEY_CLASSES_ROOT
  2. Dentro dela crie uma chave chamada .ExtensaoDoSeuArquivo
  3. Dentro dessa nova chave crie um valor no formato texto contendo A descrição desse Arquivo, por exemplo “ArquivoTextoJava”
  4. Volte para raiz HKEY_CLASSES_ROOT e crie uma nova Chave com o valor utilizado no item 4, por exemplo “ArquivoTextoJava”
  5. Abra essa chave e:
    5.1) Dentro dessa chave crie um valor para a descrição do arquivo. Exemplo “Arquivo de Texto para o Editor Java”
    5.2) Crie uma outra chave chamada “DefaultIcon” e a abra.
    5.2.1)Agora crie um novo valor de texto e adicione o caminho para o icone. Se o caminho do icone apontar para um execútavel ou dll, é necessário indicar qual icone se deseja. Exemplo “C:\Meu Programa\programa.exe,1”
    5.3) Volte para a raiz da chave criada no item 4. Adicione agora uma nova pasta chamada “Shell” e abra essa pasta.
    5.3.1) Crie dentro dessa chave uma pasta chamada Open e dentro dessa crie uma chave chamada Command
    5.3.2) Dentro dessa crie uma chave com o caminho para o local do aplicativo com o qual deseja abrir o arquivo. Exemplo: C:\Meu Programa\programa.exe “%1”

[quote=x@ndy]…
5.3.2) Dentro dessa crie uma chave com o caminho para o local do aplicativo com o qual deseja abrir o arquivo. Exemplo: C:\Meu Programa\programa.exe “%1”[/quote]
Que trabalhão hein :slight_smile:
E em Java complica mais ainda, porque não tem um executável. Tem que invocar a JVM, passando o programa Java e mais o argumento que o programa vai usar.
O comando para abrir o arquivo ficaria parecido com esse:

C:\Program Files\Java\jre7_u10\bin\javaw.exe -jar C:\Program Files\NotepadAlternativo\Notepad.jar %1O que já traz de brinde outro problema, precisaria descobrir o caminho do Java quando estiver configurando o produto.

Por essas e outras é que Java e aplicativos para PC não combinam …

[quote=gomesrod][quote=x@ndy]…
5.3.2) Dentro dessa crie uma chave com o caminho para o local do aplicativo com o qual deseja abrir o arquivo. Exemplo: C:\Meu Programa\programa.exe “%1”[/quote]
Que trabalhão hein :slight_smile:
E em Java complica mais ainda, porque não tem um executável. Tem que invocar a JVM, passando o programa Java e mais o argumento que o programa vai usar.
O comando para abrir o arquivo ficaria parecido com esse:

C:\Program Files\Java\jre7_u10\bin\javaw.exe -jar C:\Program Files\NotepadAlternativo\Notepad.jar %1O que já traz de brinde outro problema, precisaria descobrir o caminho do Java quando estiver configurando o produto.

Por essas e outras é que Java e aplicativos para PC não combinam …[/quote]
Na verdade isso não é restrição do java com um executável seria a mesma coisa. O ideal para isso é usar um instalador!

[quote=gomesrod][quote=x@ndy]…
5.3.2) Dentro dessa crie uma chave com o caminho para o local do aplicativo com o qual deseja abrir o arquivo. Exemplo: C:\Meu Programa\programa.exe “%1”[/quote]
Que trabalhão hein :slight_smile:
E em Java complica mais ainda, porque não tem um executável. Tem que invocar a JVM, passando o programa Java e mais o argumento que o programa vai usar.
O comando para abrir o arquivo ficaria parecido com esse:

C:\Program Files\Java\jre7_u10\bin\javaw.exe -jar C:\Program Files\NotepadAlternativo\Notepad.jar %1O que já traz de brinde outro problema, precisaria descobrir o caminho do Java quando estiver configurando o produto.

Por essas e outras é que Java e aplicativos para PC não combinam …[/quote]

Acredito que não precisemos de toda esta complicação, e sim apenas de um método main que pegue o argumento do endereço e manipule se ele existir.

[quote=Valcides]
Acredito que não precisemos de toda esta complicação, e sim apenas de um método main que pegue o argumento do endereço e manipule se ele existir.[/quote]

Vc não deve ter entendido o que ele quer! Ele quer associar o programa dele com extensões de arquivo do sistema operacional

[quote=x@ndy]Para fazer isso no windows é necessário adicionar determinadas chaves no registro. Você pode fazer isso via um script de instalação ou mexendo registro manualmente (não sei se existe alguma biblioteca do java para manipular o registro diretamente). Para isso execute as seguintes Operações.

  1. Abra a chave HKEY_CLASSES_ROOT
  2. Dentro dela crie uma chave chamada .ExtensaoDoSeuArquivo
  3. Dentro dessa nova chave crie um valor no formato texto contendo A descrição desse Arquivo, por exemplo “ArquivoTextoJava”
  4. Volte para raiz HKEY_CLASSES_ROOT e crie uma nova Chave com o valor utilizado no item 4, por exemplo “ArquivoTextoJava”
  5. Abra essa chave e:
    5.1) Dentro dessa chave crie um valor para a descrição do arquivo. Exemplo “Arquivo de Texto para o Editor Java”
    5.2) Crie uma outra chave chamada “DefaultIcon” e a abra.
    5.2.1)Agora crie um novo valor de texto e adicione o caminho para o icone. Se o caminho do icone apontar para um execútavel ou dll, é necessário indicar qual icone se deseja. Exemplo “C:\Meu Programa\programa.exe,1”
    5.3) Volte para a raiz da chave criada no item 4. Adicione agora uma nova pasta chamada “Shell” e abra essa pasta.
    5.3.1) Crie dentro dessa chave uma pasta chamada Open e dentro dessa crie uma chave chamada Command
    5.3.2) Dentro dessa crie uma chave com o caminho para o local do aplicativo com o qual deseja abrir o arquivo. Exemplo: C:\Meu Programa\programa.exe “%1”[/quote]

Fazer isto de forma automatizada é a questão agora. Alguém tem uma sugestão?

[quote=Valcides][quote=x@ndy]Para fazer isso no windows é necessário adicionar determinadas chaves no registro. Você pode fazer isso via um script de instalação ou mexendo registro manualmente (não sei se existe alguma biblioteca do java para manipular o registro diretamente). Para isso execute as seguintes Operações.

  1. Abra a chave HKEY_CLASSES_ROOT
  2. Dentro dela crie uma chave chamada .ExtensaoDoSeuArquivo
  3. Dentro dessa nova chave crie um valor no formato texto contendo A descrição desse Arquivo, por exemplo “ArquivoTextoJava”
  4. Volte para raiz HKEY_CLASSES_ROOT e crie uma nova Chave com o valor utilizado no item 4, por exemplo “ArquivoTextoJava”
  5. Abra essa chave e:
    5.1) Dentro dessa chave crie um valor para a descrição do arquivo. Exemplo “Arquivo de Texto para o Editor Java”
    5.2) Crie uma outra chave chamada “DefaultIcon” e a abra.
    5.2.1)Agora crie um novo valor de texto e adicione o caminho para o icone. Se o caminho do icone apontar para um execútavel ou dll, é necessário indicar qual icone se deseja. Exemplo “C:\Meu Programa\programa.exe,1”
    5.3) Volte para a raiz da chave criada no item 4. Adicione agora uma nova pasta chamada “Shell” e abra essa pasta.
    5.3.1) Crie dentro dessa chave uma pasta chamada Open e dentro dessa crie uma chave chamada Command
    5.3.2) Dentro dessa crie uma chave com o caminho para o local do aplicativo com o qual deseja abrir o arquivo. Exemplo: C:\Meu Programa\programa.exe “%1”[/quote]

Fazer isto de forma automatizada é a questão agora. Alguém tem uma sugestão?[/quote]

Como eu mesmo falei use um instalador! Eu uso o Inno Setup e o ISTool que uma interface gráfica para geração dos scripts do Inno Setup.

[quote=x@ndy][quote=gomesrod]

C:\Program Files\Java\jre7_u10\bin\javaw.exe -jar C:\Program Files\NotepadAlternativo\Notepad.jar %1

Na verdade isso não é restrição do java com um executável seria a mesma coisa. O ideal para isso é usar um instalador![/quote]
No script do instalador é possível descobrir onde o Java está instalado? Se for então está tranquilo.

[quote=gomesrod][quote=x@ndy][quote=gomesrod]

C:\Program Files\Java\jre7_u10\bin\javaw.exe -jar C:\Program Files\NotepadAlternativo\Notepad.jar %1

Na verdade isso não é restrição do java com um executável seria a mesma coisa. O ideal para isso é usar um instalador![/quote]
No script do instalador é possível descobrir onde o Java está instalado? Se for então está tranquilo.[/quote]
O instalador permite acessar o registro e por lá da para ver o aonde está instalado, a versão, etc!

[quote=x@ndy][quote=Valcides][quote=x@ndy]Para fazer isso no windows é necessário adicionar determinadas chaves no registro. Você pode fazer isso via um script de instalação ou mexendo registro manualmente (não sei se existe alguma biblioteca do java para manipular o registro diretamente). Para isso execute as seguintes Operações.

  1. Abra a chave HKEY_CLASSES_ROOT
  2. Dentro dela crie uma chave chamada .ExtensaoDoSeuArquivo
  3. Dentro dessa nova chave crie um valor no formato texto contendo A descrição desse Arquivo, por exemplo “ArquivoTextoJava”
  4. Volte para raiz HKEY_CLASSES_ROOT e crie uma nova Chave com o valor utilizado no item 4, por exemplo “ArquivoTextoJava”
  5. Abra essa chave e:
    5.1) Dentro dessa chave crie um valor para a descrição do arquivo. Exemplo “Arquivo de Texto para o Editor Java”
    5.2) Crie uma outra chave chamada “DefaultIcon” e a abra.
    5.2.1)Agora crie um novo valor de texto e adicione o caminho para o icone. Se o caminho do icone apontar para um execútavel ou dll, é necessário indicar qual icone se deseja. Exemplo “C:\Meu Programa\programa.exe,1”
    5.3) Volte para a raiz da chave criada no item 4. Adicione agora uma nova pasta chamada “Shell” e abra essa pasta.
    5.3.1) Crie dentro dessa chave uma pasta chamada Open e dentro dessa crie uma chave chamada Command
    5.3.2) Dentro dessa crie uma chave com o caminho para o local do aplicativo com o qual deseja abrir o arquivo. Exemplo: C:\Meu Programa\programa.exe “%1”[/quote]

Fazer isto de forma automatizada é a questão agora. Alguém tem uma sugestão?[/quote]

Como eu mesmo falei use um instalador! Eu uso o Inno Setup e o ISTool que uma interface gráfica para geração dos scripts do Inno Setup.[/quote]

Mas como esta associação ao formato seria feita? Quero dizer, em que parte da criação do instalador.

[quote=Valcides]
Mas como esta associação ao formato seria feita?[/quote]

Ai é com o windows! É essas são as configurações que ele necessita para saber que com qual arquivo um executável deve abrir!

[quote=Valcides]
Mas como esta associação ao formato seria feita? Quero dizer, em que parte da criação do instalador.[/quote]
O instalador é um scritp, você define quais os passos dele e a onde isso deva ficar. Eu pessoalmente faria logo após criar todas as pastas, ao final da instalação.

[quote=x@ndy][quote=Valcides]
Mas como esta associação ao formato seria feita?[/quote]

Ai é com o windows! É essas são as configurações que ele necessita para saber que com qual arquivo um executável deve abrir![/quote]

Agradeço muito por estar respondendo. Mas não me refiro ao executável jar abrir com java, e sim, txt abrir com o aplicativo em jar que criei!

[quote=Valcides][quote=x@ndy][quote=Valcides]
Mas como esta associação ao formato seria feita?[/quote]

Ai é com o windows! É essas são as configurações que ele necessita para saber que com qual arquivo um executável deve abrir![/quote]

Agradeço muito por estar respondendo. Mas não me refiro ao executável jar abrir com java, e sim, txt abrir com o aplicativo em jar que criei![/quote]

Você não entendeu. Essas configurações são para o windows saber com qual executável vai abrir um arquivo. Pode ser txt, .dat, etc. O executável pode ser seu jar, um arquivo .scm, etc.

[quote=x@ndy][quote=Valcides][quote=x@ndy][quote=Valcides]
Mas como esta associação ao formato seria feita?[/quote]

Ai é com o windows! É essas são as configurações que ele necessita para saber que com qual arquivo um executável deve abrir![/quote]

Agradeço muito por estar respondendo. Mas não me refiro ao executável jar abrir com java, e sim, txt abrir com o aplicativo em jar que criei![/quote]

Você não entendeu. Essas configurações são para o windows saber com qual executável vai abrir um arquivo. Pode ser txt, .dat, etc. O executável pode ser seu jar, um arquivo .scm, etc.[/quote]

Então esse script já inseriria as chaves no registro né? Se não for muito incômodo, você poderia postar um trecho aqui só pra ter uma base? Ah, e obrigado pelas respostas :slight_smile:

[quote=Valcides][quote=x@ndy][quote=Valcides][quote=x@ndy][quote=Valcides]
Mas como esta associação ao formato seria feita?[/quote]

Ai é com o windows! É essas são as configurações que ele necessita para saber que com qual arquivo um executável deve abrir![/quote]

Agradeço muito por estar respondendo. Mas não me refiro ao executável jar abrir com java, e sim, txt abrir com o aplicativo em jar que criei![/quote]

Você não entendeu. Essas configurações são para o windows saber com qual executável vai abrir um arquivo. Pode ser txt, .dat, etc. O executável pode ser seu jar, um arquivo .scm, etc.[/quote]

Então esse script já inseriria as chaves no registro né? Se não for muito incômodo, você poderia postar um trecho aqui só pra ter uma base? Ah, e obrigado pelas respostas :)[/quote]

Infelizmente não tenho nenhum código disponível no momento, mas a documentação do Inno Setup é muito boa e existem muita informação na internet

Muito obrigado pelas respostas, ajudaram bastante!