1
我編寫了一個程序使用applet通過rxtxComm.jar訪問串口,我更改了java.policy,這樣applet就可以訪問串口而無需簽名。當程序運行在 窗口時,它是有效的。但在Ubuntu上有一些執行(java.lang.reflect.InvocationTargetException和「npobject上的錯誤調用方法」)。爲了解決這個問題,我花了很多次到谷歌,我無法解決。是否有人有同樣的問題?這裏是關於這個程序的代碼。如何使用applet通過rxtxComm.jar發送數據到串口在ubuntu上
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「;
- 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」;
的第一行和第二距離的ubuntu,當ubuntu的不同的是:
- 許可java.lang.RuntimePermission 「loadLibrary.librxtxSerial」;
- permission java.io.FilePermission「$ {java.home} $ {/} lib $ {/} amd64 $ {/} librxtxSerial.so」,「read」;
*「我改變的java.policy,所以小程序訪問串口沒有簽署」 *鑑於你不能改變用戶機(S)的政策文件,建議對部署該應用程序的唯一可行辦法。是數字簽名的。 – 2013-02-21 11:50:09
感謝您的建議。因爲該程序僅在我們公司的少量PC上運行,而簽名則很麻煩。 – htwj1998 2013-02-22 01:15:49