1

以下の switch ステートメントで " } " エラーが発生するのはなぜですか。構文エラーはありません。コードのコンパイル時にエラーが発生しません。Eclipse は、以下の指定された位置でエラーを示しています。

} を入れた後、このエラーが発生します

- The static field KeyEvent.VK_XXXX should be accessed in a 
 static way
- case expressions must be constant expressions

switch(event.getKeyCode())
        {
        case event.VK_BACK_SLASH:
            backColor=but[27].getBackground();
            break;

        case event.VK_RIGHT:
            for(int i=0;i<but.length;i++)
            {
                if(" > ".equals(but[i].getText()))
                {
                    backColor=but[i].getBackground();
                    break;
                }
            }
            break; // error here
   }

キーを押すと、次のエラーが表示されます

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
Syntax error, insert "}" to complete SwitchBlock

    at Keyboard$HandlerClass.keyPressed(Keyboard.java:242) // this is break statement


    at java.awt.Component.processKeyEvent(Unknown Source)
    at javax.swing.JComponent.processKeyEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)

よろしく

4

3 に答える 3

1

コンパイルの問題を解決するには:

まず、クラス名を使用して、オブジェクト参照の代わりに静的コンテンツを参照します。つまり、case ステートメントでは、event.VK_BACK_SLASH の代わりに KeyEvent.VK_BACK_SLASH を使用します。

それでもうまくいかない場合は、プログラムの他の部分にエラーがあると思われます。これは、対応する中かっこの数が適切でない可能性があります。簡単な grep で問題を特定できます。grep "{" | を試してください。wc -l AND grep "}" | トイレ -l。

実行時の問題を根本的に解決するには:

Eclipse の範囲外で実行してみてください。ルート ディレクトリをクラス パスに追加するか、クラス ファイルを jar ファイルにパッケージ化します。

于 2012-11-17T07:37:44.040 に答える
1

コードで確認できる唯一の問題は次のとおりです (ただし、コンパイル時/実行時エラーではありません)。これはおそらくバグとして終了します。

but[i].getText() == " > " //this is called object identity check

これは文字列を比較する正しい方法ではありません。代わり.equalsにメソッドを使用

" > ".equals(but[i].getText()) //this is object equality check

アップデート

静的フィールド KeyEvent.VK_XXXX には、静的な方法でアクセスする必要があります

つまり、に変更する必要がevent.VK_BACK_SLASHありKeyEvent.VK_BACK_SLASHます...

于 2012-11-17T07:12:10.050 に答える
0

エラーThe static field KeyEvent.VK_XXXX should be accessed in a static wayは、次のようにフィールドに静的にアクセスする必要があることを意味します。

case KeyEvent.VK_BACK_SLASH:
    // Do something
    break;
case KeyEvent.VK_RIGHT:
    // Do something else
    break;
于 2012-11-17T07:36:26.640 に答える