[Novato] Ayuda con java y JNA+Regedit

Iniciado por martin0290, 3 Febrero 2012, 04:16 AM

0 Miembros y 2 Visitantes están viendo este tema.

martin0290

Hola que tal, soy nuevo por aca y me estoy iniciando en java. Les queria preguntar lo siguiente.

Hice un codigo con java y jna muy básico. Cuando lo ejecuto del netbeans anda perfecto. Pero cuando lo compilo al archivo y luego lo abro normal como un archivo java no cumple la función de mostrar un nombre de un registro del regedit.

Si me echan una mano les agradecería mucho!




import com.sun.jna.platform.win32.Advapi32Util;
import com.sun.jna.platform.win32.WinReg;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


final class Joption extends JFrame implements ActionListener{
    private JMenuBar JMmenuBar;
    private JMenu JMaccion;
   
    private JMenuItem JMconectar,JMcrear,JMsalir;
    private String guardar;
   
   
    public Joption() {
super("JNA");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500,500);
        definirMenu();
        this.setVisible(true);
    }
    public void definirMenu () {
JMmenuBar = new JMenuBar();
this.setJMenuBar(JMmenuBar);
       
JMaccion = new JMenu("Accion");
JMmenuBar.add(JMaccion);

JMsalir = new JMenuItem("Verificar");
JMaccion.add(JMsalir); 
       
        JMsalir.addActionListener(this);
       
    }

   
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == JMsalir) {
 
                try {
                    guardar = Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, "Software\\Native Systems Inc.", "Install Location")+"\\cstrike";
                    JOptionPane.showMessageDialog(null, guardar, "Ruta del cs", JOptionPane.QUESTION_MESSAGE);
               } catch(Exception ex){
ex.printStackTrace();
}           

        }
    }
}
       

adastra

Cita de: martin0290 en  3 Febrero 2012, 04:16 AM
Cuando lo ejecuto del netbeans anda perfecto. Pero cuando lo compilo al archivo y luego lo abro normal como un archivo java no cumple la función de mostrar un nombre de un registro del regedit.

Explicate mejor, lo compilas, luego lo ejecutas y que pasa? una excepción? el método no se ejecuta? el programa termina sin dar errores? lo estas compilando desde consola? como tienes definido tu CLASSPATH?
Perdona pero no entiendo tu pregunta.

martin0290

#2
Perdon por no expresarme correctamente. Aca va de nuevo:

"guardar = Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER, "Software\\Native Systems Inc.", "Install Location")+"\\cstrike";"

Lo que hace es sacar un string de un registro.

El codigo funciona correctamente desde el netbeans. Es decir le doy a Play... al boton verde (funciona bien, me voy al menu creado me sale la ruta del registro). Es una simple ventana con un menu donde le das click y te sale la ruta que trajo el regedit.

Luego cuando le doy a "Limpiar y construir" para que me haga el archivo .jar (ejecutable) me hace el .jar y al abrirlo crea la ventana pero cuando le doy al menu no me trae la ruta del regedit como lo hace cuando lo ejecuto directamente del netbeans. No se si al compilarlo a esta sentencia me la anula o que pero no funciona.

FOTOS:

Funcionando desde netbeans:
http://fotos.subefotos.com/a7d94906c5f7a0fb104c74340047e8f3o.png

No funcionando desde .jar:
http://fotos.subefotos.com/f9762d540204c69b689d27a49a3ff869o.png

adastra

Vale, lo más probable es que el problema este en el CLASSPATH de las librerías, con Netbeans o Eclipse normalmente no hay ningún problema porque es fácil configurar el entorno, pero si lo estas ejecutando desde un jar, tienes que especificar el CLASSPATH manualmente  con la opción "-cp" o "-classpath"
así:

java -classpath <RUTA_DE_LIBRERIA_JNA> -jar FICHERO.jar

martin0290

#4
Nada sigue igual. Pero lei en internet que para usar estas apis necesitas usar  mucho retorno de datos ya que no te las deja utilizar asi no mas  :¬¬

Gracias de todos modos :D

Igual dejo lo que me dice el cmd


Microsoft Windows XP [Versión 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrador>java -jar "C:\Documents and Settings\Adm
inistrador\Mis documentos\NetBeansProjects\JNA\dist\JNA.jar"
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/sun/j
na/platform/win32/WinReg
        at Joption.actionPerformed(Joption.java:43)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.AbstractButton.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown
Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$000(Unknown Source)
        at java.awt.EventQueue$1.run(Unknown Source)
        at java.awt.EventQueue$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown
Source)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown
Source)
        at java.awt.EventQueue$2.run(Unknown Source)
        at java.awt.EventQueue$2.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown
Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sun.jna.platform.win32.WinReg
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 39 more