具有用于串行通信的 rxtx 组件的 Java 小程序

标签 java applet serial-port rxtx

我正在尝试构建一个可以打开串行端口并与之通信的小程序。我使用 rxtxcomm.jar 进行串行通信。我构建了一个可以在 Eclipse 环境中完美运行的小程序。我构建了 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

我什至在 connect 和 open 函数中使用了 doPrivileged 方法,但它不起作用!请帮忙!! 以下是该小程序的代码片段: { /** 打开端口并开始读写的函数 */

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

}

最佳答案

刚刚遇到了同样的问题。 请确保对 RXTX 库的第一次调用位于 doPrivileged block 中。 如果它尝试在特权 block 之前加载库 - 它将因此错误而失败。

一些附加信息: http://hacky.typepad.com/blog/2009/05/using-rxtxcomm-in-applets.html

关于具有用于串行通信的 rxtx 组件的 Java 小程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5504390/

相关文章:

java - 如何使用web项目在eclipse中运行小程序

Java - 命令提示符中的 appletviewer

C# XNA 相当于带有比较器的 Java PriorityQueue?

java - 如果配置中提供了默认值,Quarkus >= 0.18.0 将无法构建

java - Apache Flink-Java> 8支持路线图?

windows - 自定义波特率

c++ - windows ReadFile() 在读取 sizeToRead 值之前不会返回

java - application.properties 与 applicationContext.xml

java - 在小程序缓存查看器中显示版本名称

c++ - 如何在boost asio下将serial_port flow_control设置为none以外的值