-1

何年も機能していたにもかかわらず、最近問題が発生し始めたため、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 コントロールの問題が増えているためです。

4

2 に答える 2

1

通常、Eclipse はServialVersionUID、シリアル バージョン ID を指定せずにシリアル化可能なオブジェクトを作成すると、警告をスローします。シリアル バージョン ID を持つことは、厳密な要件ではなくベスト プラクティスであり、異なる IDE では異なる動作をします。必要な理由の詳細については、こちらを参照してください。注意: これは警告であり、エラーではありません。警告の場合、これを回避する方法は 3 つあります。

  • Eclipse にデフォルト ID を生成するように依頼します (生成されますprivate static final long serialVersionUID = 1L;) 。
  • 自分で生成する
  • Eclipse に警告を無視するように指示する (@SuppressWarnings("serial")注釈を追加する)

もう1つの問題については、幅広い文献があります。ここにあなたが読みたいかもしれないリンクがあります。

お役に立てれば。

于 2014-04-04T15:00:22.033 に答える
1

Eclipse のコンパイラには、他のコンパイラにある場合とない場合がある、構成可能な警告とエラーが多数あります。一般に、デフォルト設定は非常に合理的であり、可能であれば修正するようにしてください。多くは、クイック修正機能を使用して簡単に修正できます。マーカー(または問題) ビューでエラーを右クリックし、[クイック修正... ] を選択します。 ここに画像の説明を入力

または、エラーまたは警告があるコードの下線 (黄色または赤色) を右クリックして、[クイック修正... ] を選択することもできます。 ここに画像の説明を入力

すべての警告/エラーに迅速な修正があるわけではありませんが、多くの警告/エラーには修正があります。

特定の警告またはエラーを無効にする場合は、プロジェクトを右クリックして [プロパティ] ダイアログを開きます。そこで、Java Compiler > Errors/Warningsの下を見て、構成可能なものをすべて見つけます。ワークスペース内のすべてのプロジェクトに同じ設定を適用する場合を除き、プロジェクト固有の設定を有効にする必要があります。

于 2014-04-04T14:52:32.873 に答える