Applet de Java con componentes rxtx para comunicación en serie
serial-port (1)
Estoy intentando crear un applet que pueda abrir un puerto serie y comunicarse con el mismo. He usado rxtxcomm.jar para las comunicaciones en serie. Tengo un applet que funciona perfectamente en el entorno eclipse. Construí el archivo Jar y firmé lo mismo, pero cuando se ejecuta en el navegador, la consola muestra el siguiente mensaje:
java.lang.ExceptionInInitializerError thrown while loading gnu.io.RXTXCommDriver
Exception in thread "thread applet-zhas_xbeeComm.xtalk-1" java.lang.ExceptionInInitializerError
at zhas_xbeeComm.Xconnect$1.run(Xconnect.java:46)
at java.security.AccessController.doPrivileged(Native Method)
at zhas_xbeeComm.Xconnect.connect(Xconnect.java:40)
at zhas_xbeeComm.xtalk.init(xtalk.java:22)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission loadLibrary.rxtxSerial)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkLink(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:123)
... 6 more
Incluso he usado el método doPrivileged en las funciones de conexión y apertura, ¡pero no funciona! ¡¡Por favor ayuda!! Aquí hay un fragmento del código del applet: {/ ** Función para abrir un puerto y comenzar a leer y escribir * /
public void connect ( final String portName ) throws Exception
{
AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
// privileged code goes here, for example:
// 1. added try catch for no such port exception;
try {
portIdentifier = CommPortIdentifier.getPortIdentifier(portName); //line 46
} catch (NoSuchPortException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Solo tuve el mismo problema. Asegúrese de que la primera llamada a la biblioteca RXTX se encuentre en el bloque doPrivileged. Si intenta cargar la biblioteca antes del bloque privilegiado, se producirá un error con este error.
Alguna información adicional: http://hacky.typepad.com/blog/2009/05/using-rxtxcomm-in-applets.html