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

我可以在您的代码中看到的唯一问题是以下(但这不是编译时/运行时错误),这很可能最终会成为一个错误:

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_SLASHKeyEvent.VK_BACK_SLASH, ...

于 2012-11-17T07:12:10.050 回答
1

要解决任何编译问题:

首先使用类名来引用静态内容而不是对象引用。意思是,在 case 语句中使用 KeyEvent.VK_BACK_SLASH 而不是 event.VK_BACK_SLASH

如果这不起作用,我怀疑您的程序的其他部分存在错误,可能是您没有正确数量的匹配大括号。一个简单的 grep 应该可以帮助您识别问题。试试 grep "{" | wc -l AND grep "}" | 厕所-l。

要根本导致您的运行时问题:

尝试在 Eclipse 范围之外运行它。通过将根目录添加到类路径或将类文件打包到 jar 文件中。

于 2012-11-17T07:37:44.040 回答
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 回答