Página 1 de 2

Problemilla con JAVA y JNI

Publicado: 14 Abr 2011, 19:24
por Yn$an€
Pues me rindo, llevo dos horas intentando que Java me cargue una librería nativa en Linux (una librería dinámica en la jerga, aka .so) y no doy pasado del error este:

Spoiler:

Código: Seleccionar todo

Exception in thread "main" java.lang.UnsatisfiedLinkError: no libSDL.so in java.library.path


Spoiler:

Código: Seleccionar todo

public class keyReader {
   
   public boolean arraykeys[] = new boolean[7];
   
   /*
   static {
       System.loadLibrary("user32");
     }
   
   native int GetKeyState(int in);
   
   
   public boolean[] Poll(){
      
      arraykeys[1] = GetKeyState(5) > 0 ? true:false;
      arraykeys[2] = GetKeyState(5) > 0 ? true:false;
      arraykeys[3] = GetKeyState(5) > 0 ? true:false;
      arraykeys[4] = GetKeyState(5) > 0 ? true:false;
      arraykeys[5] = GetKeyState(5) > 0 ? true:false;
      
      return arraykeys;
   }
   */

   static {
       System.loadLibrary("libSDL.so");
     }

native int GetKeyState(int in);
   
   
   public boolean[] Poll(){
      
      arraykeys[1] = GetKeyState(5) > 0 ? true:false;
      arraykeys[2] = GetKeyState(5) > 0 ? true:false;
      arraykeys[3] = GetKeyState(5) > 0 ? true:false;
      arraykeys[4] = GetKeyState(5) > 0 ? true:false;
      arraykeys[5] = GetKeyState(5) > 0 ? true:false;
      
      return arraykeys;
   }

}

Que conste que tengo el library.path configurado correctamente y la biblioteca en su lugar correspondiente, pero no hay manera.

Si alguien sabe como solucionarlo, o una forma alternativa de hacer polling en java nativamente, agradecería me lo explicase, porque estoy atascado en este punto y no puedo avanzar sin probar el código.
(Necesito generar los paquetes con los datos en tiempo real y comprobar si al enviarlos vía TCP/IP se producen fallas lógicas en el formato de paquete que he creado). La otra condición es que los eventos de teclado NO sirven, y eso es porque el código es muy poco eficaz para, por ejemplo, juegos; esa parte del código sería lo equivalente al movimiento de un personaje de videojuegos.

Para m0skit0 y pspCaracas: OpenWRT ya está instalado. La solución final va a ser una mezcla de cosas explosiva (e ineficiente, pero es lo que hay). Para la interfaz y control, java; es fácilmente deducible. El motivo es que me interesa practicarlo para coger soltura. Para la generación de los paquetes, una librería con exportaciones a la plataforma JNI, dado que esto lo hace un compañero mío. Para comunicarme con el router, emularé netcat desde Java y enviaré los paquetes a través de esto.

Elegante sincretismo de conceptos y metodologías, diría yo :canuto: :canuto:
(Para partirse el culo por el camino, si no va me pillo C++ o C y fuera)

Bueno, si no os habéis cansado de leer y seguís con ganas de ayudar, muchísimas gracias.

Re: Problemilla con JAVA y JNI

Publicado: 14 Abr 2011, 20:20
por m0skit0
Estas cosas de bajo nivel no se hacen con Java hombre. Mala elección de lenguaje. Pero como insistes...

Yn$an€ escribió:Para comunicarme con el router, emularé netcat desde Java y enviaré los paquetes a través de esto.

:? Reinventar la rueda...

Dicho esto, ¿has probado con libSDL a secas?

Re: Problemilla con JAVA y JNI

Publicado: 14 Abr 2011, 20:27
por Yn$an€
Ya lo pensé, pero me apetecía bastante. Por eso me molesto en emular el netcat. Nunca lo he hecho y quiero saber si soy capaz. No obstante estoy de acuerdo en lo que respecta al lenguaje :lol:

Si, he probado de todas las formas posibles y todo tipo de combinaciones, pero nada.

EDITO: Ya encontré la solución.

Necesito crear wrappers para las funciones en una librería dinámica que exporte unos punteros exóticos para que java los reconozca.

Re: Problemilla con JAVA y JNI

Publicado: 15 Abr 2011, 04:51
por pspCaracas
El tiempo es limitado como para estar perdiéndolo en ver si de verdad puedes...convéncete de que si puedes y usa netcat :roll:

EDITO:

Por cierto, recuerda que el router NO es un PC, es decir, vas a tener poca RAM, nada de swap y un procesador poco potente. Asumir que java te va a funcionar como en el PC puede ser un error garrafal. Solo ponte a pensar que para correr Java vas a necesitar una máquina virtual, la cual a su vez traducirá a lenguaje máquina el bytecode generado...en C simplemente ejecutas directamente, nada de interpretaciones de por medio, es decir, no mal gastas recursos (memoria, CPU, etc).

Usa C que es un lenguaje para machos!! (por eso aun me cuesta :lol: )

Re: Problemilla con JAVA y JNI

Publicado: 15 Abr 2011, 08:49
por Yn$an€
pspCaracas escribió:El tiempo es limitado como para estar perdiéndolo en ver si de verdad puedes...convéncete de que si puedes y usa netcat :roll:


El programa en Java es para el PC, en el router uso netcat :D
Con el programa voy a emular una conexión de netcat (es decir, como si usase netcat, pero en realidad es mi programa), al que se conectará el netcat del router.

Por cierto, recuerda que el router NO es un PC, es decir, vas a tener poca RAM, nada de swap y un procesador poco potente. Asumir que java te va a funcionar como en el PC puede ser un error garrafal. Solo ponte a pensar que para correr Java vas a necesitar una máquina virtual, la cual a su vez traducirá a lenguaje máquina el bytecode generado...en C simplemente ejecutas directamente, nada de interpretaciones de por medio, es decir, no mal gastas recursos (memoria, CPU, etc).


Sólo para aclarar, el ruter usa netcat ;)

pspCaracas escribió:Usa C que es un lenguaje para machos!! (por eso aun me cuesta :lol: )


Yo ya uso C
Imagen

Re: Problemilla con JAVA y JNI

Publicado: 15 Abr 2011, 09:31
por m0skit0
Yn$an€ escribió:emular una conexión de netcat

¿Emular una conexión de netcat? Una conexión de netcat es simplemente una conexión TCP o UDP estándar :roll:

Re: Problemilla con JAVA y JNI

Publicado: 15 Abr 2011, 10:20
por Yn$an€
m0skit0 escribió:
Yn$an€ escribió:emular una conexión de netcat

¿Emular una conexión de netcat? Una conexión de netcat es simplemente una conexión TCP o UDP estándar :roll:


OK, ya lo sé. Y luego usa pipes para redirigir los flujos a la entrada estándar. La función dup(), creo que es. Si. Pero no deja de ser emular una conexión del netcat, en mi opinión.

Que un programa pase por el otro, vamos, si he cometido alguna imprecisión te dije una vez que vienen de fábrica. :canuto:

Re: Problemilla con JAVA y JNI

Publicado: 15 Abr 2011, 12:31
por m0skit0
Yn$an€ escribió:Pero no deja de ser emular una conexión del netcat, en mi opinión.

Pues tu opinión es la contraria a la mía :lol:

Re: Problemilla con JAVA y JNI

Publicado: 15 Abr 2011, 12:37
por pspCaracas
Imagen

Hijo, la rueda ya existe...y no es cuadrada!!

Re: Problemilla con JAVA y JNI

Publicado: 15 Abr 2011, 12:40
por Yn$an€
Si querían que me rindiera, pos bien, me rindo. Usaré netcat.

Yo lo único que quería era aprender...