Ich würde gerne eine Bilddatei dir in meinem Jar-File gespeichert mit ImageIO laden kann mir da jemand behilflich seinen?
Eig. schonImage image = ImageIO.read(getClass().getResourceAsStream("bild.jpg"));
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class drawing extends JPanel {
public drawing(){
try{
Var.image = ImageIO.read(getClass().getResource("b1.png"));
}catch(Exception e){
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.drawImage(Var.image, 0, 0, 800,600,null);
repaint();
}
}
Wie hast du ihn denn gefüllt?Es ist so dass ich den Catch Block bisher gefüllt habe aber trotzdem keinen Fehler angezeigt bekommen.
Das muß nicht unbedingt so sein. Hast du schon geprüft, ob dein Panel überhaupt angezeigt wird?Es wird kein Fehler angezeigt also wird dass Bild eingelesen aber nicht gezeichnet.
Meinst du mit Bild dein JPanel ? Ja, das musst du !Kann es sein dass man das Bild zum JFrame adden muss?
Exception in thread "main" java.lang.NullPointerException
at javax.swing.JComponent.paintComponent(Unknown Source)
at test.drawing.paintComponent(drawing.java:13)
at test.drawing.<init>(drawing.java:33)
at test.Main.main(Main.java:10)
Ich meine damit, dass dein Panel möglicherweise auch dann nicht sichtbar ist, wenn das Bild erfolgreich geladen wird. Ersetze doch einmal testweise deine paintComponent-Methode durch eine ganz einfache, wie beispielsweise die folgende:Was meinst du mit angezeigt?
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.BLUE);
}
Exception in thread "main" java.lang.NullPointerException
at javax.swing.JComponent.paintComponent(Unknown Source)
at test.drawing.paintComponent(drawing.java:13)
at test.drawing.<init>(drawing.java:33)
at test.Main.main(Main.java:10)
Den Code dazu musst du dir angucken, oder den hier posten. So kann man nur raten, was der Fehler ist.Ja die habe ich
package test;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class drawing extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.BLUE);
}
public drawing(){
try{
Var.image = ImageIO.read(getClass().getResourceAsStream("b1.png"));
}catch(Exception e){
e.printStackTrace();
System.out.println("Fehler");
}
paintComponent(null);
}
}
Der Aufruf paintComponent(null) ist garantiert falsch und verursacht wohl die Fehlermeldung. Hast du noch eine Fehlermeldung, wenn du das wieder entfernst? Falls ja, bitte posten. Falls nicht, könntest du meinen Vorschlag aus Posting #25 ausprobieren, um zu testen, ob deine GUI überhaupt wie erwartet dargestellt wird. Vielleicht liegt das Problem dort und es wird bereits erfolgreich gezeichnet.Hab rumprobiert was ne Idee was man machen kann?
Wenn nötig über repaint(). Ich glaube aber nicht, dass es hier nötig ist.Wie kann ich die paint Methode aufrufen?
Meinst du mit Bild dein JPanel ? Ja, das musst du !
package test;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class gui {
static int weite,höhe;
static JFrame frame;
static JLabel lbl;
public gui(){
Font g = new Font("Times New Roman", 1, 29);
lbl = new JLabel();
lbl.setBounds(0, 260, 2000, 30);
lbl.setFont(g);
frame = new JFrame("Game");
frame.setVisible(true);
frame.setSize(Var.BREITE, Var.HÖHE);
frame.setLocation(Var.x, Var.y);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.addKeyListener(new Tasten());
frame.add(lbl);
frame.setBackground(Color.GREEN);
}
}
frame.getContentPane().setBackground(Color.GREEN);
package test;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class drawing extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(Var.image, 0, 0, this);
}
public drawing(){
paintComponent(null);
try{
Var.image = ImageIO.read(getClass().getResourceAsStream("b1.png"));
}catch(Exception e){
e.printStackTrace();
System.out.println("Fehler");
}
}
}
Eigentlich hatte ich allerdings gemeint, das JPanel einzufärben (also drawing), damit man sieht, ob es erscheint.Danke das mit der Hintergrundfarbe funkt.
behaelter.add(komponente);
. Um es konkreter zu sagen, müsste man den Codeausschnitt sehen, in dem du deine GUI-Objekte erzeugst und zusammenbaust.package test;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class gui {
static int weite,höhe;
static JFrame frame;
static JLabel lbl;
public gui(){
Font g = new Font("Times New Roman", 1, 29);
lbl = new JLabel();
lbl.setBounds(0, 260, 2000, 30);
lbl.setFont(g);
frame = new JFrame("Game");
frame.setVisible(true);
frame.setSize(Var.BREITE, Var.HÖHE);
frame.setLocation(Var.x, Var.y);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(null);
frame.addKeyListener(new Tasten());
frame.add(lbl);
frame.getContentPane().setBackground(Color.GREEN);
frame.add(new drawing());
}
}
Ausserdem würde ich das mal löschen:setVisible(true) erst am Funktionsende aufrufen
frame.setLayout(null);
package test;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class drawing extends JPanel {
public drawing(){
try{
Var.image = ImageIO.read(getClass().getResourceAsStream("b1.png"));
}catch(Exception e){
e.printStackTrace();
System.out.println("Fehler");
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(Var.image, 0, 0, this);
setVisible(true);
repaint();
}
}
Das bezog sich eigentlich nicht auf drawing, sondern auf dein JFrame, also die Klasse gui. Sobald du es dort aufrufst, wird die Oberfläche gezeichnet. Zu dem Zeitpunkt hast du dein JPanel (drawing) aber noch nicht hinzugefügt, so dass es frühestens beim nächsten Neuzeichnen sichtbar wird. Das Neuzeichnen wird entweder manuell über repaint() ausgelöst, oder durch andere Ereignisse, wie beispielsweise eine Größenänderung des Fensters. Es ist also besser,setVisible(true) erst am Funktionsende aufrufen.
setVisible(true)
erst nach dem Hinzufügen des Panels aufzurufen, idealerweise eben am Ende des Konstruktors von gui.frame.setLayout(null);
noch enthalten? Es kann auch daran liegen, dass drawing nicht erscheint. Also solltest du es zumindest testweise mal entfernen.