2016-04-25 46 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,那是錯誤的地方。) –