2016-04-25 48 views
0

大家好所以我正在我的动画程序上取得进展,但我遇到了一个问题,我的alien.png没有显示在jframe中。我在这个动画demo.java所在的文件夹中有alien.png,所以我不确定为什么它找不到alien.png。任何帮助,将不胜感激PNG图像上的动画问题

package animationdemo; 


import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class AnimationDemo extends JFrame { 
    Image alien; 
    public AnimationDemo() { 

    alien = Toolkit.getDefaultToolkit().getImage("alien.png"); 
    MovingMessagePanel messagePannel = new MovingMessagePanel(); 
    messagePannel.alien = this.alien; 
     Timer timer = new Timer(50, messagePannel); 
    timer.start(); 
    this.add(messagePannel); 
    } 
    public static void main(String[] args) { 
    AnimationDemo frame = new AnimationDemo(); 
    frame.setTitle("Project 10"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(500, 500); 
    frame.setVisible(true); 
    } 

} 

class MovingMessagePanel extends JPanel implements ActionListener { 
    public int xCoordinate = 20; 
    public int yCoordinate = 20; 
    public int xDir=5; 
    public int yDir=5; 
    public Image alien; 

    public void actionPerformed(ActionEvent e) { 
    repaint(); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    if (xCoordinate > getWidth()) xDir*=-1; 
    if (yCoordinate > getHeight()) yDir*=-1; 
    if (xCoordinate <0) xDir*=-1; 
    if (yCoordinate <0) yDir*=-1; 
    xCoordinate += xDir; 
    yCoordinate += yDir; 
    g.drawImage(alien,xCoordinate,yCoordinate,this); 
    } 
} 

回答

1

让我们来看看代码行:

package animationdemo; // this one! 

import java.awt.Graphics; 
// .. 

public class AnimationDemo extends JFrame { 
    Image alien; 
    public AnimationDemo() { 

    alien = Toolkit.getDefaultToolkit().getImage("alien.png"); // & this one! 

最后一行是有效试图加载从“当前目录”一File

但是图像可能无法再作为File访问。应用程序资源在部署时将成为嵌入式资源,所以现在开始访问它们是明智的做法。一个必须由URL而不是文件访问。有关如何形成URL,请参阅info. page for embedded resource

注意给出的第一个,高亮线,寻找资源大概是最好的路径:

..getResource("/animationdemo/alien.png") 

还应注意的是getResource方法是大小写敏感的,所以..

..getResource("/animationdemo/alien.PNG") 

。 。不会找到小写版本,反之亦然。


顺便说一句,我做我的“缺少像”理论的检查通过使这个小改变上述来源:

alien = new BufferedImage(40, 40, BufferedImage.TYPE_INT_RGB); 
      //Toolkit.getDefaultToolkit().getImage("alien.png"); 

鉴于我看到一个动画的黑色正方形,它支持主要的问题是没有找到图像。该代码还有一些其他方面应该调整,但它基本上是在正确的方向。

+0

是的,这使得很多感觉我只是不知道如何声明外部变量我试图这个,但它告诉我它无法找到URL URL alien = this.getClass()。getResource(“/ animationdemo /alien.png“); – ried

+0

你使用IDE吗?如果是这样,哪一个?图像是否存储在与'AnimationDemo.java'源文件相同的地方? (如果使用IDE,那是错误的地方。) –