Abrir imagem pelo visualizador do SO

13 respostas
gqferreira

Boa tarde pessoal!

É possível (imagino que sim) a partir do caminho de uma imagem mandar que o SO abra essa imagem em seu visualizador de imagens? Não é minha aplicação que vai exibir a imagem e sim o SO, só preciso “pedir” à ele isso.

… falando de desktop …
Vlw Gente! :thumbup:

13 Respostas

Felagund
Desktop.getDesktop().open(CAMINHO_PARA_IMAGEM);
gqferreira

Exception in thread "main" java.lang.UnsupportedOperationException: Desktop API is not supported on the current platform at java.awt.Desktop.getDesktop(Desktop.java:126) at testes.AbrirImagem.main(AbrirImagem.java:11)

^^ Existe outros meios?

Estou usando Ubuntu.

gqferreira

http://java.sun.com/javase/6/docs/api/java/awt/Desktop.html

Muito interessante essa api, mó canivete suíço… mas parece que deve funcionar apenas em windows…

gqferreira

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/

Alguem sabe quais sao essas bibliotecas? Pois não estou encontrando-as

gqferreira

nossa, pouquissimas visitas desde ontem, será que ninguem passou por isso ainda? :shock:
Eu ainda nao achei as bibliotecas…

E

gqferreira:
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/

A tradução é "se seu desktop é KDE, no caso do Linux, ou CDE, no caso do Solaris, em vez de Gnome, então essa API não funciona e dá a mensagem “Desktop API is not supported on the current platform”. "

gqferreira

Sim, mas…

Estou usando Gnome :expressionless:

E

Hum… então retiro o que eu disse. Infelizmente, não tenho aqui um Linux para testar se essa mensagem ocorre sempre (pode ser, por exemplo, que os folgados da Sun simplesmente tenham implementado a classe Desktop apenas para o Windows e talvez o Solaris.)

Felagund

Infelizmente ela não é implementada em linux, e eu não encontrei nenhum similar, infelizmente…

Você pode partir para o metodo gambiarronico e fazer uma chamada ao S.O. via System.getRumtime().exec();

pode ser que não funcione também, nunca testei.

E

entanglement:
Hum… então retiro o que eu disse. Infelizmente, não tenho aqui um Linux para testar se essa mensagem ocorre sempre (pode ser, por exemplo, que os folgados da Sun simplesmente tenham implementado a classe Desktop apenas para o Windows e talvez o Solaris.)

UPDATE - ela foi implementada para o Windows, para o Solaris (quando usando um desktop Gnome, não um CDE) e para o Linux com desktop Gnome, mas pode ser que sua versão de Gnome não seja compatível com a versão do Gnome que a sua determinada compilação do Java use, então pode ser que ele não consiga carregar as bibliotecas esperadas. Parece aquilo que no Windows chamamos de “DLL Hell” - aquele problema de compatibilidade de versões de código que é um inferno para os programadores Windows. Como se chama esse tipo de coisas no Linux eu não sei, mas sei que existe uma coisa parecida com versões do Kernel, do Gnome etc.

gqferreira

Felagund:
Infelizmente ela não é implementada em linux, e eu não encontrei nenhum similar, infelizmente…

Você pode partir para o metodo gambiarronico e fazer uma chamada ao S.O. via System.getRumtime().exec();

pode ser que não funcione também, nunca testei.

É… eu também pensei em fazer assim antes de postar no GUJ, acho que vai ter que ser assim mesmo.
Há… é Runtime.getRuntime().exec();

Solucao:

Runtime.getRuntime().exec("eog /home/gustavo/Imagens/imagem.png");

eog é o visualizador do gnome, nuss… programo em java para nao ficar preso em SO agora to preso no Gnome \o/
if-else AHEUahUEAu

Valeu gente, se surgir outra solucao eu posto…

gqferreira

Há… como eu precisava parar a aplicacao enquanto o eog funcionava, criei um Process que recebe o runtime, ai eu mando o process esperar enquanto o eog nao fechar.
Ficou assim:

Process process = Runtime.getRuntime().exec("eog /home/gustavo/Imagens/imagem.png"); process.waitFor(); JOptionPane.showMessageDialog(null, "Se essa mensagem apareceu é porque o eog foi fechado");

Do jeito que estava antes, a aplicacao chamava o eog e morria…

gqferreira

Surgiu um problema ^^

Usando o Desktop.getDesktop().open(""); como faco para que a minha aplicacao fique pausada enquanto o programa chamado estiver aberto?

Como preciso fazer com que a minha aplicacao rode em windows e Linux, vou usar os dois esquemas…

Criado 7 de julho de 2010
Ultima resposta 10 de jul. de 2010
Respostas 13
Participantes 3