Как я могу использовать апплет для отправки данных на последовательный порт через rxtxComm.jar на Ubuntu

Я пишу программу, использующую апплет для доступа к последовательному порту через rxtxComm.jar, я изменяю java.policy, чтобы апплет мог обращаться к последовательному порту без подписи. Когда программа работает в Windows, она эффективна. Но в Ubuntu есть некоторые исключения (java.lang.reflect.InvocationTargetException и "ошибка вызова метода для npobject"). Чтобы решить эту проблему, я провел много раз в Google, но не смог ее решить. У кого-нибудь есть такая же проблема? Вот код этой программы.

print.html:

function print() {
    var zplText = $("#zplText").val();
    document.printApplet.print(zplText);
}



<textarea rows="5" cols="6" id="zplText"></textarea>
<a href="#" onClick="print()">print</a>
<applet id="printApplet" alt="" codebase=.. code="zpl/ZplPrint.class">
    <PARAM NAME="archive" VALUE="../lib/RXTXcomm.jar">
</applet>

ZplPrint.java:

public class ZplPrint extends Applet {
static String zpl;
static CommPortIdentifier portId;
static CommPort commPort;
static SerialPort serialPort;
@SuppressWarnings("rawtypes")
static Enumeration portList;
static OutputStream out;

public void print(String zplText) {
    zpl = zplText;
    if (zpl == null) {
        return;
    }
    byte[] zplByte = zpl.getBytes();

    portList = CommPortIdentifier.getPortIdentifiers();
    while (portList.hasMoreElements()) {
        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

            try {

                commPort = portId.open(portId.getName(), 2000);
                serialPort = (SerialPort) commPort;

                serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
                        SerialPort.PARITY_NONE);
                out = serialPort.getOutputStream();
                out.write(zplByte);
                commPort.close();
            } catch (PortInUseException e) {
                e.printStackTrace();
            } catch (UnsupportedCommOperationException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (NullPointerException e) {
                e.printStackTrace();
            }

            System.out.println("Find CommPort: " + portId.getName());
        }
    }

}

java.policy:

  • разрешение java.lang.RuntimePermission "loadLibrary.rxtxSerial";
  • разрешение java.io.FilePermission "${java.home}${/}lib${/}ext${/}x86${/}rxtxSerial.dll", "читать";
  • разрешение java.util.PropertyPermission "gnu.io.log.mode", "читать";
  • разрешение java.util.PropertyPermission "gnu.io.SerialPorts", "написать, прочитать";
  • разрешение java.util.PropertyPermission "gnu.io.rxtx.SerialPorts", "читать, писать";
  • разрешение java.util.PropertyPermission "gnu.io.ParallelPorts", "читать";
  • разрешение java.util.PropertyPermission "gnu.io.rxtx.ParallelPorts", "читать";
  • разрешение java.lang.RuntimePermission "modifyThreadGroup";
  • разрешение java.lang.RuntimePermission "modifyThread";

Первая строка и вторая отличается от Ubuntu, когда Ubuntu:

  • разрешение java.lang.RuntimePermission "loadLibrary.librxtxSerial";
  • Разрешение java.io.FilePermission "${java.home}${/}lib${/}amd64${/}librxtxSerial.so", "read";

1 ответ

Решение

Я решил сам

   permission java.lang.RuntimePermission "loadLibrary.rxtxSerial";

   permission java.io.FilePermission "${java.home}${/}lib${/}ext${/}amd64${/}librxtxSerial.so", "read";

   permission java.io.FilePermission "${java.home}${/}lib${/}ext${/}librxtxSerial.so", "read";

   permission java.io.FilePermission "${/}dev", "read";

   permission java.util.PropertyPermission "gnu.io.log.mode", "read";

   permission java.util.PropertyPermission "gnu.io.SerialPorts", "write,read";

   permission java.util.PropertyPermission "gnu.io.rxtx.SerialPorts", "read,write";

   permission java.util.PropertyPermission "gnu.io.ParallelPorts", "read";

   permission java.util.PropertyPermission "gnu.io.rxtx.ParallelPorts", "read";

   permission java.lang.RuntimePermission "modifyThreadGroup";

   permission java.lang.RuntimePermission "modifyThread";
Другие вопросы по тегам