简体   繁体   中英

How can i use applet send data to serial port via rxtxComm.jar On ubuntu

I write a program use applet to access serial port via rxtxComm.jar,i change the java.policy,so the applet can access serial port without signed.When the program running on Windows,it's effective.But on ubuntu there have some execptions( java.lang.reflect.InvocationTargetException and "error calling method on npobject" ).In order to solve this problem,i have spent many times to google,i couldn't solve.Is anyone have the same problem? Here is the code about this program.

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 :

  • permission java.lang.RuntimePermission "loadLibrary.rxtxSerial";
  • permission java.io.FilePermission "${java.home}${/}lib${/}ext${/}x86${/}rxtxSerial.dll", "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";

The first line and second is different from ubuntu,when the ubuntu is:

  • permission java.lang.RuntimePermission "loadLibrary.librxtxSerial";
  • permission java.io.FilePermission "${java.home}${/}lib${/}amd64${/}librxtxSerial.so", "read";

i had solved myself.

   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";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM