Abrir (Ejecutar) un archivo (fichero) contenido en un Jar

Iniciado por 1mpuls0, 6 Noviembre 2009, 05:07 AM

0 Miembros y 1 Visitante están viendo este tema.

1mpuls0

Hola, estoy haciendo una aplicacion la cual ocupa un archivo de excel, tengo mi archivo a nivel del jar y dentro del jar tambien tengo ese mismo archivo, cuando el arhivo de excel no es copiado junto con el jar, toma el contenido del excel contenido en el jar, pero quiero que al oprimir un boton me abra el xls para ver si el usuario está deacuerdo en tomar esos valores, alguien me puede dar una idea de como hacerlo o que tengo que investigar??


Saludos
abc

Leyer

#1
sera asi

Código (java) [Seleccionar]
try {
Desktop.getDesktop().open(new File(getClass().getResource("/bd/Crystal.xml").getFile()));
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}


Saludos.

1mpuls0

Hola muchas gracias por responder, pero este metodo no me funciona, parece ser que hay un problema en la conversion, he tratado de solucionarlo pero aun no tengo logros. Al querer abrir el archivo me aparece lo siguiente


java.lang.IllegalArgumentException: The file: java.io.BufferedInputStream@5224ee doesn't exist.
    at java.awt.Desktop.checkFileValidation(Desktop.java:191)
    at java.awt.Desktop.open(Desktop.java:252)
    at interfazValidacion.excel(interfazValidacion.java:349)
    at interfazValidacion.access$600(interfazValidacion.java:10)
    at interfazValidacion$9.actionPerformed(interfazValidacion.java:224)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1170)
    at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1211)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)


He intentado con lo siguiente


Desktop desktop = Desktop.getDesktop(); 
        URL url = Thread.currentThread().getContextClassLoader().getResource("mensajes/Error.xls");
        try { 
            desktop.open(new File(url.getPath())); 
        }catch (IOException e) {             
            e.printStackTrace(); 
        }




Desktop d = Desktop.getDesktop();
        try {
        URI uri = getClass().getResource("/mensajes/Error.xls").toURI();
            d.browse(uri);
        }
catch (Exception e) {
        e.printStackTrace();
        }



Bueno tengo otros metodos, pero son muy parecidos, he instanciado variables para posteriormente hacer la convesion tras conversion, pero no resulta.

Alguna otra sugerencia??

Gracias
abc

Leyer

prueba usando las class de los jar a ver si tienes acceso aunke deberia hacerse asi ya que se supone que un jar es un comprimido. si no lo puedes hacer con asi la verdad no se me ocurre nada por haora.

Código (java) [Seleccionar]
java.util.jar.JarEntry;
java.util.jar.JarFile;
java.util.jar.JarEntry;
java.util.jar.JarInputStream;
java.util.jar.Pack200;



Saludos.

1mpuls0

Hola de nuevo, sigo intentando y solo me funciona


File path = new File("mensajes/Error.xls");
try{
Desktop.getDesktop().open(path);
}catch (IOException e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}



Pero no me sirve ya que quiero que ejecute el archivo guardado en el jar :s

Por lo que he mirado el metodo open solo recibe tipo File, asi que me pregunto si haciendo la conversion de InputStream podria funcionar, lo malo es que tampoco puedo hacer la conversion o mas bien no se cual es la manera correcta :S

Help!!

Y muchas gracias
abc

1mpuls0

Cita de: L-EYER en  8 Noviembre 2009, 16:53 PM
prueba usando las class de los jar a ver si tienes acceso aunke deberia hacerse asi ya que se supone que un jar es un comprimido. si no lo puedes hacer con asi la verdad no se me ocurre nada por haora.

Código (java) [Seleccionar]
java.util.jar.JarEntry;
java.util.jar.JarFile;
java.util.jar.JarEntry;
java.util.jar.JarInputStream;
java.util.jar.Pack200;



Saludos.


Ok, intentaré,  y posteo mis resultados

Gracias nuevamente
abc