2016-06-01 9 views
0

Ich bin ein Student, der derzeit Java-Programmierung studiert und Netbeans verwendet, um die Anwendung zu erstellen. Das Programm ist bereits fertig und lädt schön in der IDE (mit Bildern). Ich muss es in JAR für eine Präsentation zu meinem Dozenten aufbauen und habe es getan, aber die Bilder sind nicht in der JAR vorhanden.Ich kann Bilder nicht laden. JAR

Zunächst einmal habe ich alle verfügbaren Antworten überprüft, damit Bilder im JAR vorhanden sein können, aber ich konnte es nicht richtig mit dem Programm bekommen, da es selbst in IDE nicht geladen wird und Fehler anzeigt. Die meisten haben darauf hingewiesen, dass ich (getClass().getClassLoader().getResource("image.jpg")) eingeben muss. Ich habe versucht, es einzugeben, aber es zeigt Fehler, vor allem, weil meine Codes für die Platzierung der ImageIcon anders sind. Dies ist der Teil meines Codes

import java.awt.Color; 
import java.awt.Font; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.IOException; 
import javax.swing.*; 
import javax.swing.ImageIcon; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import static javax.swing.JFrame.EXIT_ON_CLOSE; 

public class A2{ 

    public void GUI() throws IOException { 

     JFrame frame = new JFrame(); 
     frame.setVisible(true); 
     frame.setTitle("Minus"); 
     frame.setSize(700,500); 
     frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 

      //Set the layout 
      JPanel panel; 
     panel = new JPanel(); 
     panel.setLayout(null); 
     frame.setContentPane(panel); 

     // Create all components 
     JLabel ctgy = new JLabel("Minus"); 
      JLabel minus2 = new JLabel("What is 6 squares minus 3 squares?"); 
     JButton ans_a = new JButton("9"); 
      JButton ans_b = new JButton("3"); 
      JButton ans_c = new JButton("7"); 
     JButton back = new JButton("Back"); 
      JLabel min2 = new JLabel(); 

     //Add objects to layout 
     panel.add(ctgy); 
      panel.add(minus2); 
     panel.add(min2); 
      panel.add(ans_a); 
      panel.add(ans_b); 
      panel.add(ans_c); 
     panel.add(back); 

     // Set position of objects in content pane 
      min2.setLocation(100,100); 
      minus2.setLocation(20,50); 
     ctgy.setLocation(10,3); 
      ans_a.setLocation(500,100); 
      ans_b.setLocation(500,150); 
      ans_c.setLocation(500,200); 
     back.setLocation(500, 400); 

     //Set size of object 
      min2.setSize(300,300); 
     ctgy.setSize(200,50); 
      minus2.setSize(350,50); 
      ans_a.setSize(100,30); 
      ans_b.setSize(100,30); 
      ans_c.setSize(100,30); 
     back.setSize(100, 30); 

     //Set the fonts and colors 
     Font font1 = new Font("Cooper Black", Font.BOLD, 26); 
     Font font2 = new Font("Calisto MT", Font.BOLD, 20); 
     ctgy.setFont(font1); 
     ctgy.setBackground(Color.white); 
      minus2.setFont(font2); 
      minus2.setBackground(Color.red); 
     panel.setBackground (Color.RED); 
      ans_a.setBackground(Color.white); 
     ans_b.setBackground(Color.white); 
      ans_c.setBackground(Color.white); 

      min2.setIcon(new ImageIcon("src/images/6-3.png")); 
      ans_b.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent arg0) { 
       JOptionPane.showMessageDialog(null, "Correct!"); 
       try { 
        A3.main(null); 
       } catch (IOException ex) { 
        Logger.getLogger(A1.class.getName()).log(Level.SEVERE, null, ex); 
       } 
        } 
       }); 

      ans_a.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent arg0) { 
        JOptionPane.showMessageDialog(null, "Incorrect! Please try again."); 
       } 
      });   

      ans_c.addActionListener(new ActionListener(){ 
       public void actionPerformed(ActionEvent arg0) { 
        JOptionPane.showMessageDialog(null, "Incorrect! Please try again."); 
       } 
      }); 
     frame.repaint(); 



     back.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent f){ 
           Categories.main(null); 
         } 
       }); 



    }  

public static void main (String [] args) throws IOException { 
     A2 gd = new A2(); 
     gd.GUI(); 
    } 


} 

, wo ich die JLabel angeben, mein Bild zu setzen, in dem ich als min2 genannt:

Unten ist mein vollständiger Code der JFrame des Programm präsentiert

JLabel ctgy = new JLabel("Minus"); 
      JLabel minus2 = new JLabel("What is 6 squares minus 3 squares?"); 
      JButton ans_a = new JButton("9"); 
      JButton ans_b = new JButton("3"); 
      JButton ans_c = new JButton("7"); 
      JButton back = new JButton("Back"); 
      JLabel min2 = new JLabel(); 

Dies fügt das Panel für die JLabel:

panel.add(min2); 

die Größe und Lage:

min2.setLocation(100,100); 
min2.setSize(300,300); 

schließlich das Bild selbst und -ort:

min2.setIcon(new ImageIcon("src/images/6-3.png")); 

Dieser Teil Fehler zeigen, weil ich diesen Satz eine neue Klasse zu öffnen, wenn ein Benutzer die JButton klicken, so dass das passieren würde, da Sie nicht tun Habe die A3-Klasse:

public void actionPerformed(ActionEvent arg0) { 
        JOptionPane.showMessageDialog(null, "Correct!"); 
        try { 
         A3.main(null); 
        } catch (IOException ex) { 
         Logger.getLogger(A1.class.getName()).log(Level.SEVERE, null, ex); 
        } 

Ich habe die JAR-Datei mit WinRAR überprüft und bestätigt, dass der Bilderordner und die Bilder darin sind. Ich wollte die Screenshots posten, aber Imgur funktioniert nicht für mich.

Die Pfaddatei für alle Bilder befindet sich innerhalb src/images.

Bitte schlagen Sie vor, welche Änderungen ich vornehmen muss. Danke und es tut mir leid, wenn es zu viel gefragt wurde.

+0

Ihre JAR sollte keinen src-Ordner enthalten ... Und Sie sollten Ressourcen mit 'getClass(). GetResourceAsStream (String path)' laden. Siehe diese Frage https://stackoverflow.com/questions/2343187/loading-resources-using-getclass-getresource –

+0

Obwohl ein detaillierteres Detail der Ressourcen geladen sind hier. http://StackOverflow.com/a/676273/2308683 –

+0

* "Ich muss es in JAR für eine Präsentation zu meinem Dozenten bauen und hat es getan, aber die ** Bilder sind nicht vorhanden in der JAR." * Sind Bist du sicher? Was ist die Ausgabe von 'jar -tvf the.jar' von der Kommandozeile? –

Antwort

0
jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/img.png"))); 

Dies ist, wie Sie eigentlich die Bilddatei laden sollten.Ihr Dateipfad ist falsch versuchen Sie es mit diesem Ansatz.