2016-04-25 6 views
0

Hallo alle Also mache ich Fortschritte auf meinem Animationsprogramm, aber ich stoße auf ein Problem, wo meine alien.png nicht im Jframe angezeigt wird. Ich habe das alien.png im gleichen Ordner wie diese Animation demo.java, also bin ich mir nicht sicher, warum es das alien.png nicht findet. Jede mögliche Hilfe würdeProbleme mit der Animation auf einem PNG-Bild

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); 
    } 
} 

Antwort

1

Schauen wir uns die Codezeilen aussehen geschätzt werden:

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! 

Das letzte Zeile effektiv eine File aus dem ‚aktuellen Verzeichnis‘ zu laden versucht.

Aber das Bild wird wahrscheinlich als File nicht mehr zugänglich sein. Anwendungsressourcen werden zum Zeitpunkt der Bereitstellung zu eingebetteten Ressourcen. Es ist daher ratsam, sofort auf sie zuzugreifen, als ob sie gerade vorhanden wären. Auf eine muss per URL anstatt Datei zugegriffen werden. Informationen zum Erstellen der URL finden Sie unter info. page for embedded resource.

Hinweis die erste Zeile hervorgehobenen gegeben, den besten Weg für die Ressource zu finden, vermutlich wäre:

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

Beachten Sie auch, dass die getResource Verfahren Groß- und Kleinschreibung, so ..

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

. Ich werde weder die Kleinschreibung finden noch umgekehrt.


Als beiseite, habe ich einen Scheck meiner ‚Bild fehlt‘ Theorie durch diese kleine Änderung oben an die Quelle zu machen:

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

Da ich ein animiertes schwarzes Quadrat sah, die unterstützt Hauptproblem ist, dass das Bild nicht gefunden wird. Der Code hat noch einige andere Aspekte, die optimiert werden sollten, aber es geht grundsätzlich in die richtige Richtung.

+0

Ja, das macht viel Sinn Ich bin nur nicht sicher, wie die Alien-Variable zu deklarieren Ich versuchte dies, aber es sagt mir, es kann URL URL nicht finden alien = this.getClass(). GetResource ("/ animationdemo /alien.png "); – ried

+0

Verwenden Sie eine IDE? Wenn ja, welcher? Wird das Bild an derselben Stelle wie die 'AnimationDemo.java' -Quelldatei gespeichert? (Das ist der falsche Ort, wenn Sie eine IDE verwenden.) –