Abrir imagem pelo visualizador do SO

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:

Desktop.getDesktop().open(CAMINHO_PARA_IMAGEM);

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.

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…

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

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

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

[quote=gqferreira]http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/desktop_api/

[/quote]

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”. "

Sim, mas…

Estou usando Gnome :expressionless:

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.)

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.

[quote=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.)
[/quote]

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.

[quote=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.[/quote]

É… 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…

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…

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…