java中的奇怪错误,符号'super。'未找到

时间:2013-11-06 04:12:08

标签: java compiler-errors

我最近一直在研究java中一个快速的小型太空入侵者游戏,我遇到了一些问题,因为'外星人'没有正确移动。我通过快速谷歌搜索发现,我只需要添加一个构造函数并覆盖它,但是当我这样做时,我遇到了一个有趣的错误消息:

错误:找不到符号:super.cpuMove(m);

                        ^(this points directly to the "." in the original error message)

我最终找到了一种通过更改代码来完全避免此错误的方法,但是这个更改增加了大约50-60个不必要的行,我非常希望将其转换回几行快速行。以下是发生此错误的代码部分:

@Override
protected void cpuMove(ShapesMove m){
    super.cpuMove(m);
    cpu_x(m);
    cpu_y(m);
}

为什么每次都会出现此错误消息,无论我对其余代码的更改是什么?而且,为什么它指向“。”而不是“超级”或“cpuMove(m)”?我希望能够适应这一点,但似乎Java不会让我。

编辑:

这是我的其余代码。我想也许这是别的东西而且我不必发布这个,所以我为此道歉:

import javax.swing.*;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;

public class ShapesMove extends JPanel{

    public static int x = 40;
    public static int y = 40;
    public static int h = 240;
    public static int k = 240;

    public static void main(String[] args){

        final JFrame frame = new JFrame("Movement of 2d Shapes");
        final ShapesMove m = new ShapesMove();
        frame.setSize(400,400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(m);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        Action actionRight = new AbstractAction(){
            public void actionPerformed(ActionEvent actionRightEvent){
                x += 10;
                m.repaint();
            }
        };

        Action actionLeft = new AbstractAction(){
            public void actionPerformed(ActionEvent actionLeftEvent){
                x -= 10;
                m.repaint();
            }
        };

        Action actionUp = new AbstractAction(){
            public void actionPerformed(ActionEvent actionUpEvent){
                y -= 10;
                m.repaint();
            }
        };

        Action actionDown = new AbstractAction(){
            public void actionPerformed(ActionEvent actionDownEvent){
                y += 10;
                m.repaint();
            }
        };

        KeyStroke right = KeyStroke.getKeyStroke("RIGHT");
        KeyStroke left = KeyStroke.getKeyStroke("LEFT");
        KeyStroke up = KeyStroke.getKeyStroke("UP");
        KeyStroke down = KeyStroke.getKeyStroke("DOWN");

        InputMap inputMap = m.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        inputMap.put(right, "RIGHT");
        inputMap.put(left, "LEFT");
        inputMap.put(up, "UP");
        inputMap.put(down, "DOWN");
        m.getActionMap().put("RIGHT", actionRight);
        m.getActionMap().put("LEFT", actionLeft);
        m.getActionMap().put("UP", actionUp);
        m.getActionMap().put("DOWN", actionDown);

    }

    @Override
    protected void cpuMove(ShapesMove m){
        super.cpuMove(ShapesMove m);
        cpu_x(m);
        cpu_y(m);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        draw(g);
    }

    public void cpu_x(ShapesMove m){
        if(h > x){
            h -= 10;
            m.repaint();
        }else if(h < x){
            h += 10;
            m.repaint();
        }else{
            m.repaint();
        }
    }

    public void cpu_y(ShapesMove m){
        if(k > y){
            k -= 10;
            m.repaint();
        }else if(k < y){
            k += 10;
            m.repaint();
        }else{
            m.repaint();
        }
    }

    public void draw(Graphics g){
        g.drawOval(x, y, 40, 40);
        g.drawRect(h, k, 40, 40);
    }

}

关于代码的几个快速说明:首先,我知道我说这是一个太空入侵者游戏,现在这真的只有很少甚至没有相似之处,它是一个WIP。我在photoshop中制作自己的图像和动画背景,这就是为什么我有一个矩形和圆形而不是调用图像。这真正意味着要做的是模拟游戏中的敌人如何在调用方法时“跟随”玩家,因为我希望这个游戏也有一些“Galaga”方面。

2 个答案:

答案 0 :(得分:0)

正如消息所说,

你的超类没有方法cpuMove(),匹配cpuMove(ShapesMove m)签名。

答案 1 :(得分:0)

唯一的解释是你在这里滥用了“超级”。 “super”用于指代子类的父类。如果你的类没有扩展任何东西,那么它就没有任何东西可以引用,或者你的超类没有“cpuMove”方法,这就是你收到错误的原因。