2016-08-29 11 views
-1

Das Ziel dieses kleinen Programm ist ein .jpg Bild und zeigt es in einer Canvas-Klasse von JPanel erweitert zu laden, die in einem JFrame-Objekt in der Hauptklasse angezeigt wird, etwa so:Warum gibt das Programm nicht die Methode loadImage() ein?

Die Main-Klasse

<code> 

    package imageloader; 
    import java.awt.Graphics; 
    import javax.swing.JFrame; 
    public class ImageLoader { 
     public static void main(String[] args) 
     { 
      JFrame frame = new JFrame(); 
      Canvas c = new Canvas(); 
      Graphics g = frame.getGraphics(); 
      Loader load = new Loader(); 
      frame.setSize(500, 500); 
      c.setImage(load.loadImage()); 
      frame.add(c); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setVisible(true); 
     } 
    } 




</code> 
<h1>The Canvas class</h1> 


<code> 
    package imageloader; 
     import java.awt.Graphics; 
     import java.awt.image.BufferedImage; 
     import javax.swing.JPanel; 
     public class Canvas extends JPanel 
     { 
      private BufferedImage img = null; 
      public Canvas() 
      { 
       this.setSize(500, 500); 
       this.setVisible(true); 
      } 
      @Override 
      public void paint(Graphics g) 
      { 
       g.drawLine(0, 0, 250, 250); // just to see if the Canvas is painting, and it does! 
       g.drawImage(img, 250, 250, null); 
       repaint(); 
      } 
      public void setImage(BufferedImage img) 
      { 
       this.img = img; 
      } 
     } 

</code> 
<h1>The Loading class</h1> 

<code> 

    package imageloader; 
    import java.awt.image.BufferedImage; 
    import java.io.File; 
    import java.io.IOException; 
    import javax.imageio.ImageIO; 
    public class Loader 
    { 
     public BufferedImage loadImage() 
     { 
      BufferedImage im = null; 
      try 
      { 
       File f = new File("player.jpg"); 
       im = ImageIO.read(f.getAbsoluteFile()); 
       System.out.println("Loaded!"); // this did not apear in my Output-Console in Netbeans 
      } 
      catch (IOException e) {} 
      return im; 
     } 
    } 

</code> 

Meine Hauptfrage ist bereits im Titel gefragt. Zuerst habe ich den Code mit dem Java Documentation Tutorial verglichen und die Parent-Klasse von Canvas.java in Component mit wenig Auswirkung geändert. Schauen Sie sich hier als Referenz:

Link to source

Dann fand ich diese mit Google:

Displaying an image in Swing (on StackOverflow)

Da mein JFrame (oder die Komponente für diese Angelegenheit) in der Tat führen die drawLine() Funktion aus (0 | 0) bis (250 | 250) das war nicht das Problem, aber ich habe paintcomponent() und paintComponents() ausprobiert, der erste zeichnete die Linie, aber nicht das Bild und schien wesentlich langsamer, letzterer zeichnete nicht Linie überhaupt, also bin ich wieder auf die paint() Methode zurückgegangen.

Vor meiner kleinen Recherche habe ich verschiedene Dinge ausprobiert. Ich habe die Loader-Klasse ein wenig von der Tutorial-Version abgeändert.

Die vollständige Anleitung finden Sie hier: Link

+3

Nun, Sie haben still eine IOException weggeworfen, das ist nie ein kluger Zug ... – John3136

+0

Sind Sie sicher, dass Ihr Pfad für player.jpg richtig ist? –

+0

Danke John ... Ich weiß, ich könnte diesen Stapel ausdrucken ... Raghu K Nair, ja ich bin mir sicher, da das Bild im selben Ordner wie meine Quelle ist, also habe ich keinen langen Weg und arbeite so herum Gefahr! Ich schätze Ihre Eingabe ... und ich habe den Code geändert, so dass der Pfad der Datei von der Klasse File gefunden wird. –

Antwort

0

ich mit John3136 zustimmen, aber direkt zu beantworten: „Loaded“

Wenn Sie nicht sehen, dann ist es ein Hinweis darauf, dass eine der anderen Zwei Zeilen im Versuch werfen eine Ausnahme. Die weitere Fehlersuche ist ohne die Ausnahmeinformationen schwierig.

Setzen Sie e.printStackTrace() in Ihren catch-Block und posten Sie das Ergebnis hier, wenn Sie immer noch Schwierigkeiten haben.

Obwohl sich die Datei möglicherweise im selben Verzeichnis wie Ihre Quelle befindet, muss sie sich im selben Verzeichnis befinden wie Ihre ausführbare Datei , damit Ihr Code sie finden kann. Überprüfen Sie den Wert von f.getAbsolutePath(), um zu sehen, ob Sie das erwarten.

+0

Es hat funktioniert! Vielen Dank! –

+0

Können Sie dies als beantwortet markieren? Es vereinfacht die Buchhaltung. –

Verwandte Themen