何年も機能していたにもかかわらず、最近問題が発生し始めたため、ActiveX コントロールを置き換えるアプレットを作成しようとしています。これでできることは、シリアル ポート (私の場合はバーコード スキャナー) からデータを読み取り、そのデータを入力ボックスに渡すことだけです。また、これを改善する方法についての指針も大歓迎です。
コード:
package checkin;
import jssc.SerialPort;
import jssc.SerialPortException;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import netscape.javascript.*;
import java.applet.Applet;
public class MainSerial extends Applet {
static SerialPort port;
static JSObject window;
public static void main(String[] args) { //WARNING
SerialPort port = new SerialPort("COM1");
try {
port.openPort();
port.setParams(9600, 8, 1, 0);
int mask = SerialPort.MASK_RXCHAR + SerialPort.MASK_CTS + SerialPort.MASK_DSR;
port.setEventsMask(mask);
port.addEventListener(new SerialPortReader()); //ERROR
} catch (SerialPortException ex) {
window.eval("alert('Could not open port.\nThe port may be in use by another program.')");
}
}
class SerialPortReader implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
if(event.isRXCHAR()) {
try {
byte buffer[] = port.readBytes();
int x = 0;
int count = buffer.length;
StringBuilder data = new StringBuilder();
while(x < count) {
data.append(buffer[x]);
x++;
}
window.eval("getSerialData('" + data.toString() + "')");
} catch (SerialPortException ex) {
window.eval("alert('Port could not be read.')");
}
}
}
}
}
Eclipse でスローされるエラー:
The serializable class MainSerial does not declare a static final serialVersionUID field of type Long
Eclipse でスローされる警告:
No enclosing instance of MainSerial is accessible. Must qualify the allocation with an enclosing instance of type MainSerial.
これはJavaでの私の最初の試みです。私の無知を許してください。なぜこれらのエラーが Eclipse では表示されるのに、NetBeans では表示されないのでしょうか? また、行の場合
port.addEventListener(new SerialPortReader());
その特定の親に、なぜそれを再初期化する必要があるのでしょうか? 私は何か小さなものを見逃していると確信しており、おそらく非常に明白ですが、どんな助けも大歓迎です。アプレットを作成しようとしている理由は、ActiveX コントロールの問題が増えているためです。