Abrir .jar através de duplo-clique no Gnome 3 (Debian) [RESOLVIDO]

1. Abrir .jar através de duplo-clique no Gnome 3 (Debian) [RESOLVIDO]

Anderson Weller
andersoncw

(usa Debian)

Enviado em 15/10/2014 - 12:58h

Tenho instalado o Debian 7.6 com o Gnome 3.4.2 e não consigo executar um arquivos .jar através de um duplo-clique (usando o Nautilus).

Porém, consigo executá-lo através do terminal (java -jar arquivo.jar).

Testei em um outro computador, com Ubuntu, e ele foi executado normalmente.

Descobri que posso escolher no Nautilus qual é o programa padrão para executar um .Jar:

- Clicar com o botão direto sobre o arquivo;
- Escolher a opção "Propriedades";
- Clicar na aba "Abrir com";
- Clicar sobre o aplicativo desejado (no meu caso o "Oracle Java 7 Runtime");
- Clicar em "Definir como padrão", depois no botão "Fechar.

Obs.: Também acrescentei permissão de execução no arquivo.

Fazendo essa alteração, quando dou duplo-clique sobre o .jar aparece um processo Java na lista do "Monitor de Sistema" com a linha de comando correta (java -jar arquivo.jar), porém ele executar durante alguns segundos depois muda para estado "dormindo" e não abre a interface gráfica.



Tenho instalado os seguintes JREs:

Selecção Caminho Prioridade Estado
------------------------------------------------------------
* 0 /usr/lib/jvm/java-7-oracle/jre/bin/java 1063 modo automático
1 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061 modo manual
2 /usr/lib/jvm/java-6-oracle/jre/bin/java 1062 modo manual
3 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1051 modo manual
4 /usr/lib/jvm/java-7-oracle/jre/bin/java 1063 modo manual


Alguma ideia sobre o que pode estar ocasionando esse problema? Pois consigo abrir outros .JAR.



  


2. Re: Abrir .jar através de duplo-clique no Gnome 3 (Debian) [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 15/10/2014 - 13:26h

Amigo , instale o Java JDK (Kit de Desenvolvimento), dai irá funcionar , ou se preferir , instale o OpenJDK , se nao me engano , por ele já tem como abrir com duplo-clique

Espero ter ajudado

[]'s

T+


3. Re: Abrir .jar através de duplo-clique no Gnome 3 (Debian) [RESOLVIDO]

Anderson Weller
andersoncw

(usa Debian)

Enviado em 15/10/2014 - 16:57h

Valeu Thiago, mas eu já estou com o OpenJDK 6 e 7 instalados.

Porém, como a interface desse programa JAR não ficava OK, tive que instalar o Oracle JDK 7. Assim, consigo abri-lo por linha de comando sem problema.

O que não consigo é fazer o Gnome abrir esse JAR através do duplo clique apesar de já ter configurado o Nautilus para abri-lo com o Oracle JDK 7.




4. Re: Abrir .jar através de duplo-clique no Gnome 3 (Debian) [RESOLVIDO]

Anderson Weller
andersoncw

(usa Debian)

Enviado em 16/10/2014 - 09:56h

Acabei de descobrir que ocorre erro quando executo o JAR pelo terminal e não estou dentro do mesmo diretório dele.

Quer dizer, dá erro quando executo o JAR passando como parâmetro o caminho absoluto até ele (estando em um outro diretório qualquer).

Como não dá o mesmo erro no Ubuntu, só no Debian, então gostaria de saber se preciso configurar alguma coisa no Java para isso funcionar.


A mensagem de erro é a seguinte:

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: sun.font.FreetypeFontScaler.initIDs(Ljava/lang/Class;)V
at sun.font.FreetypeFontScaler.initIDs(Native Method)
at sun.font.FreetypeFontScaler.<clinit>(FreetypeFontScaler.java:50)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:260)
at sun.font.FontScaler.<clinit>(FontScaler.java:98)
at sun.font.TrueTypeFont.getScaler(TrueTypeFont.java:1262)
at sun.font.FileFontStrike.<init>(FileFontStrike.java:179)
at sun.font.FileFont.createStrike(FileFont.java:95)
at sun.font.Font2D.getStrike(Font2D.java:344)
at sun.font.Font2D.getStrike(Font2D.java:289)
at sun.font.FontDesignMetrics.initMatrixAndMetrics(FontDesignMetrics.java:358)
at sun.font.FontDesignMetrics.<init>(FontDesignMetrics.java:350)
at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:302)
at sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:1113)
at javax.swing.JComponent.getFontMetrics(JComponent.java:1623)
at sun.swing.MenuItemLayoutHelper.reset(MenuItemLayoutHelper.java:125)
at sun.swing.MenuItemLayoutHelper.<init>(MenuItemLayoutHelper.java:107)
at javax.swing.plaf.basic.BasicMenuItemUI.getPreferredMenuItemSize(BasicMenuItemUI.java:417)
at javax.swing.plaf.basic.BasicMenuItemUI.getPreferredSize(BasicMenuItemUI.java:367)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1659)
at javax.swing.BoxLayout.checkRequests(BoxLayout.java:484)
at javax.swing.BoxLayout.preferredLayoutSize(BoxLayout.java:301)
at javax.swing.plaf.basic.DefaultMenuLayout.preferredLayoutSize(DefaultMenuLayout.java:60)
at java.awt.Container.preferredSize(Container.java:1794)
at java.awt.Container.getPreferredSize(Container.java:1778)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1661)
at javax.swing.JRootPane$RootLayout.preferredLayoutSize(JRootPane.java:925)
at java.awt.Container.preferredSize(Container.java:1794)
at java.awt.Container.getPreferredSize(Container.java:1778)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1661)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:719)
at java.awt.Container.preferredSize(Container.java:1794)
at java.awt.Container.getPreferredSize(Container.java:1778)
at java.awt.Window.pack(Window.java:809)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)




5. Resolvido

Anderson Weller
andersoncw

(usa Debian)

Enviado em 16/10/2014 - 23:22h

Descobri que o problema estava relacionado com o diretório corrente.

O problema ocorria sempre que o diretório corrente era diferente da localização do arquivo JAR, .

Tudo isso por causa do retorno da função: System.getProperty("user.dir");

Ver: http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html


A solução para o problema é achar a localização exata do arquivo JAR.

O link com a melhor solução para isso foi o seguinte: http://stackoverflow.com/questions/15359702/java-get-location-of-jar-file

----------------------------
/**
* Compute the absolute file path to the jar file.
* The framework is based on http://stackoverflow.com/a/12733172/1614775
* But that gets it right for only one of the four cases.
*
* @param aclass A class residing in the required jar.
*
* @return A File object for the directory in which the jar file resides.
* During testing with NetBeans, the result is ./build/classes/,
* which is the directory containing what will be in the jar.
*/
public static File getJarDir(Class aclass) {
URL url;
String extURL; // url.toExternalForm();

// get an url
try {
url = aclass.getProtectionDomain().getCodeSource().getLocation();
// url is in one of two forms
// ./build/classes/ NetBeans test
// jardir/JarName.jar froma jar
} catch (SecurityException ex) {
url = aclass.getResource(aclass.getSimpleName() + ".class");
// url is in one of two forms, both ending "/com/physpics/tools/ui/PropNode.class"
// file:/U:/Fred/java/Tools/UI/build/classes
// jar:file:/U:/Fred/java/Tools/UI/dist/UI.jar!
}

// convert to external form
extURL = url.toExternalForm();

// prune for various cases
if (extURL.endsWith(".jar")) // from getCodeSource
extURL = extURL.substring(0, extURL.lastIndexOf("/"));
else { // from getResource
String suffix = "/"+(aclass.getName()).replace(".", "/")+".class";
extURL = extURL.replace(suffix, "");
if (extURL.startsWith("jar:") && extURL.endsWith(".jar!"))
extURL = extURL.substring(4, extURL.lastIndexOf("/"));
}

// convert back to url
try {
url = new URL(extURL);
} catch (MalformedURLException mux) {
// leave url unchanged; probably does not happen
}

// convert url to File
try {
return new File(url.toURI());
} catch(URISyntaxException ex) {
return new File(url.getPath());
}
}
----------------------------







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts