Java-апплет с компонентами rxtx для последовательной связи - PullRequest
2 голосов
/ 31 марта 2011

Я пытаюсь создать апплет, который может открыть последовательный порт и общаться с ним.Я использовал rxtxcomm.jar для последовательной связи.У меня есть встроенный апплет, который отлично работает в среде затмения.Я собрал файл Jar и подписал то же самое, но при запуске в браузере консоль показывает следующее:

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

Я даже использовал метод doPrivileged для функций connect и open, но он не работает!Пожалуйста помоги!!Вот фрагмент кода апплета: {/ ** Функция для открытия порта и начала чтения и записи * /

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();
            }

}

1 Ответ

3 голосов
/ 16 мая 2011

Просто была такая же проблема.Пожалуйста, убедитесь, что первый вызов библиотеки RXTX находится в блоке doPrivileged.Если он попытается загрузить библиотеку перед привилегированным блоком - он потерпит неудачу с этой ошибкой.

Дополнительная информация: http://hacky.typepad.com/blog/2009/05/using-rxtxcomm-in-applets.html

...