rxtxComm.jar経由でアプレットを使用してシリアルポートにアクセスするプログラムを作成し、java.policyを変更して、アプレットが署名なしでシリアルポートにアクセスできるようにします。プログラムがWindowsで実行されている場合、それは効果的です。java.lang.reflect.InvocationTargetException と「npobject のメソッド呼び出しエラー」。この問題を解決するために、何度もググってみましたが、解決できませんでした。このプログラムに関するコードは次のとおりです。
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", "read";
- パーミッション java.util.PropertyPermission "gnu.io.log.mode", "read";
- パーミッション java.util.PropertyPermission "gnu.io.SerialPorts", "write,read";
- 許可 java.util.PropertyPermission "gnu.io.rxtx.SerialPorts", "読み取り、書き込み";
- パーミッション java.util.PropertyPermission "gnu.io.ParallelPorts", "read";
- パーミッション java.util.PropertyPermission "gnu.io.rxtx.ParallelPorts", "read";
- 許可 java.lang.RuntimePermission "modifyThreadGroup";
- 許可 java.lang.RuntimePermission "modifyThread";
ubuntuが次の場合、1行目と2行目はubuntuとは異なります。
- 許可 java.lang.RuntimePermission "loadLibrary.librxtxSerial";
- パーミッション java.io.FilePermission "${java.home}${/}lib${/}amd64${/}librxtxSerial.so", "read";