Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从某个KeyEvent开始的类强制转换异常_Java_Debugging_Classcastexception - Fatal编程技术网

Java 从某个KeyEvent开始的类强制转换异常

Java 从某个KeyEvent开始的类强制转换异常,java,debugging,classcastexception,Java,Debugging,Classcastexception,与我的一个老问题一样,在同一个游戏中仍然在改进,只是这次我有四个类和另一个异常错误。同样的“java是第二种语言,似乎还不能证明我的中间C++粘贴。” 简介:在2-2.5年的时间里,我们必须用我们的团队中的多数规则(三java,C++,1 php家伙)来做语言。我正在用这个“迷你”游戏测试机制,并试图修复出现故障的问题,但这(以及其他问题)是另一个我自己无法解决的问题。我尝试了论坛,并浏览了一些旧的自教java书籍。 我需要关于如何修复类强制转换异常的这种情况的帮助。 我的代码并简要说明了应该发

与我的一个老问题一样,在同一个游戏中仍然在改进,只是这次我有四个类和另一个异常错误。同样的“java是第二种语言,似乎还不能证明我的中间C++粘贴。” <>简介:在2-2.5年的时间里,我们必须用我们的团队中的多数规则(三java,C++,1 php家伙)来做语言。我正在用这个“迷你”游戏测试机制,并试图修复出现故障的问题,但这(以及其他问题)是另一个我自己无法解决的问题。我尝试了论坛,并浏览了一些旧的自教java书籍。

我需要关于如何修复类强制转换异常的这种情况的帮助。

我的代码并简要说明了应该发生什么:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.JPanel;
import javax.swing.Timer;

public class Stage extends JPanel implements ActionListener
{
private static final long serialVersionUID = 1L;
private Timer start_stop;
private SPRITES player;
public Stage()
{
    addKeyListener(new TAdapter());
    setFocusable(true);
    setBackground(Color.black);
    setDoubleBuffered(true);

    player = new SPRITES();

    start_stop = new Timer(5, this);
    start_stop.start();

}

public void paint(Graphics character)
{
    super.paint(character);

    Graphics2D G2D = (Graphics2D) character;
    G2D.drawImage(player.getImage(), player.getX(), player.getY(), this);

    @SuppressWarnings("rawtypes")
    ArrayList ms = player.getMissiles();
    Toolkit.getDefaultToolkit().sync();
    character.dispose();

      for (int i = 0; i < ms.size(); i++ ) 
      {
            SPRITES m = (SPRITES) ms.get(i); //error here
            G2D.drawImage(m.getImage(), m.getX(), m.getY(), this);

            if(m.isVisible())
                m.move();
            else ms.remove(i);
      }
      }

      public void actionPerformedjuan(ActionEvent e) 
      {
            @SuppressWarnings("rawtypes")
            ArrayList ms = player.getMissiles();

            for (int i = 0; i < ms.size(); i++) 
            {
                SPRITES m = (SPRITES) ms.get(i);
                if (m.isVisible()) 
                    m.move();
                else ms.remove(i);  
            }
      player.move();
      repaint();
      }

public void actionPerformed(ActionEvent arg0) 
{
    player.move();
    repaint();
}

private class TAdapter extends KeyAdapter
{
    public void keyReleased(KeyEvent e)
    {
        player.keyReleased(e);
    }

    public void keyPressed(KeyEvent e)
    {
        player.keyPressed(e);
    }
}
}
制作我的动作并导入图片。此外,它还应该使我的导弹发射从飞船与空间的关键,或至少建立结构的想法

import java.awt.Image;

import javax.swing.ImageIcon;

public class Mussiles 
{
private int x, y;
private Image missile;
boolean visible;

private final int width = 30;
private final int missile_sped = 2;

public Mussiles(int x, int y)
{
    ImageIcon pine = new ImageIcon(this.getClass().getResource("/resouse/missile.png"));
    missile = pine.getImage();
    visible = true;
    this.x = x;
    this.y = y; 
}

public Image getImage()
{
    return missile;
}

public int getX()
{
    return x;
}

public int getY()
{
    return y;
}

public boolean isVisible()
{
    return visible;
}

public void move()
{
    x += missile_sped;
    if(x > width)
        visible = false;
}
}
导入导弹并使其在不直接显示在屏幕上时不可见

import javax.swing.JFrame;

@SuppressWarnings("serial")
public class Framing extends JFrame
{
public Framing()
{
    add(new Stage());

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(800, 600);
    setLocationRelativeTo(null);
    setTitle("Failing Mini Game");
    setResizable(false);
    setVisible(true);
}
public static void main(String[] args)
{
        new Framing();  
}
}
将所有的类绑定在一起,使它们都能正常工作

问题出在按下空格键开火时。它只是向控制台发送错误,如果我正确阅读eclipse回溯,它会在第一个类中指向这里,如图所示:

据我所知,这是因为我正在导入一个未扩展或实现的对象。这就是我迷失在如何解决这个问题上的地方我是否将此通用代码区域放在另一个类中,或者是否有更智能的方法来解决此问题?


我还想知道,是否有人知道一个很好的几乎是外行的调试指南,我还没有听说过任何详细的解释,但不是太可怕的头脑麻木的细节

你的班
Mussiles
不是精灵


另外,正常的
ArrayList
不能保证返回
SPRITE
。尝试将其声明更改为
ArrayList
,以便它只能保存精灵对象(并相应地更新其他值),这样更安全。

您的类
Mussiles
不是精灵


另外,正常的
ArrayList
不能保证返回
SPRITE
。尝试将其声明更改为
ArrayList
,以便它只能保存精灵对象(并相应地更新其他值),这样更安全。

公共类Mussiles{
…这不是一种
精灵
,而是将其添加到
ArrayList

missiles.add(new Mussiles(x + sprite_size, y + sprite_size/2));
这就是
ClassCastException
的原因,因为
Mussiles
不可能被视为
精灵的实例

首先,确保
musiles
扩展自
sprite
,然后将
ArrayList
更新为仅允许类型的
sprite

private static ArrayList<SPRITES> missiles;
这也意味着您不需要盲目地使用大小写值,因为现在将更加严格地定义类型

ArrayList<SPRITES> ms = player.getMissiles();

for (int i = 0; i < ms.size(); i++) 
{
    SPRITES m = ms.get(i);
ArrayList ms=player.get飞弹();
对于(int i=0;i

查看以获取更多详细信息

公共类musiles{
…这不是一种类型的
精灵
,但您可以将其添加到
导弹
阵列列表

missiles.add(new Mussiles(x + sprite_size, y + sprite_size/2));
这就是
ClassCastException
的原因,因为
Mussiles
不可能被视为
精灵的实例

首先,确保
musiles
扩展自
sprite
,然后将
ArrayList
更新为仅允许类型的
sprite

private static ArrayList<SPRITES> missiles;
这也意味着您不需要盲目地使用大小写值,因为现在将更加严格地定义类型

ArrayList<SPRITES> ms = player.getMissiles();

for (int i = 0; i < ms.size(); i++) 
{
    SPRITES m = ms.get(i);
ArrayList ms=player.get飞弹();
对于(int i=0;i

查看以获取更多详细信息

公共类混乱{
…这不是一种
精灵
公共类混乱{
…这不是一种类型的
精灵
…如果我听起来非常不称职,很抱歉,但是在我修复了我的阵列列表之后,我该如何处理这行代码?
导弹。添加(新的Mussiles(x+sprite\u大小,y+sprite\u大小/2))
什么都没有,只要
蚌类
扩展
精灵
导弹
仅限于包含
精灵
就可以了……啊,谢谢你解释我哪里出错了,我似乎还记得你帮助过JLabel。另一方面:我似乎编程错了即使在它工作之后。我看不到我的导弹发射,我让空格键把我放回繁殖点。但这是我至少可以解决的问题。从我在这些事情上的“有限”经验来看,看起来你走错了方向。你应该有一个管理输入(键/鼠标)的集中组件以及绘制/更新实体。您应该有一个“游戏循环”,用于检查输入、更新状态和安排渲染。然后(可能)会出现关键事件传递给实体,以便他们可以决定要做什么。新实体可能应该直接添加到游戏模型中。但这只是一个非常“粗略”的过程概念…我很可能没有按照它应该执行的方式来做,但我还没有找到很多关于使用Java的正确游戏结构的好书。我可能没有足够努力地寻找,但我从你的简历中假设,你可能知道关于这类主题的任何好书?大多数我倾向于关注小程序,它们不是我喜欢的类型很抱歉,如果我听起来很不称职,但是在我修复了我的Arraylist之后,