Bild aus .jar Archiv laden geht nicht

mapa

Mitglied
Hallo alle zusammen,

ich habe ein applet erstellt und das ganze in einem .jar archiv gepackt. im ordner images befindet sich die datei background.bmp, die als hintergrund dienen soll, wenn ich das applet nun starte wird der hintergrund nicht anzeigt... hat jemand eine Ahnung was ich falsch gemacht habe könnte?


mein code sieht so aus:

Tetris.java
Java:
package Tetris;
import javax.swing.*;
public class Tetris extends JApplet {
	
	private static final long serialVersionUID = -8185750808184067061L;

	Board board;
	
	JPanel test;

	public Tetris()
	{
		
		setFocusable(true);

		add(new JLabel(new ImageIcon(getClass().getResource("./images/background.bmp"))));
		
		board = new Board(20, 20, 30, (byte)10 ,(byte)20 );
		
		add(board);
	}
	
	public void init() {
		Tetris tetris = new Tetris();
		tetris.setVisible(true);
	}

}

die ordner struktur in der .jar file:
Code:
Tetris/
	Tetris.java
	Board.java
	....

META-INF/
	MANIFEST.MF

images/
	background.bmp
 
ich habe ein applet erstellt und das ganze in einem .jar archiv gepackt. im ordner images befindet sich die datei background.bmp, die als hintergrund dienen soll, wenn ich das applet nun starte wird der hintergrund nicht anzeigt...

Eines deiner Probleme ist das bmp-File an sich, das wird nämlich nicht unterstützt. ImageIcon benutzt die Toolkit.getImage Methode, diese unterstützt nur gif,jpg und png, siehe: API DOC (ansonsten denke ich, müsste auch der Punkt in dem Pfad vorne weg "/images/...")

die ordner struktur in der .jar file:
Code:
Tetris/
	Tetris.java
	Board.java
	....

META-INF/
	MANIFEST.MF

images/
	background.bmp
Tetris.java? Du meinst sicherlich Tetris.class usw. oder? 😉
 
Eines deiner Probleme ist das bmp-File an sich, das wird nämlich nicht unterstützt. ImageIcon benutzt die Toolkit.getImage Methode, diese unterstützt nur gif,jpg und png, siehe: API DOC (ansonsten denke ich, müsste auch der Punkt in dem Pfad vorne weg "/images/...")


Tetris.java? Du meinst sicherlich Tetris.class usw. oder? 😉

Danke, das bitmaps nicht unerstütz werden hätt ich nicht gedacht, hab mal in ne png convertiert und es klappt... allerdings nur wenn ich kein board objekt erstelle. was muss ich ändern damit das hintergrundbild erhalten bleibt? und ja, es war .class dateien im .jar file 😀

Java:
package Tetris;
import javax.swing.*;
public class Tetris extends JApplet {
	
	private static final long serialVersionUID = -8185750808184067061L;

	Board board;
	
	JPanel test;

	public Tetris()
	{
		
		setFocusable(true);

		add(new JLabel(new ImageIcon(getClass().getResource("/images/background.png"))));
		
		// board = new Board(20, 20, 30, (byte)10 ,(byte)20 );
		
		// add(board);
	}
	
	public void init() {
		Tetris tetris = new Tetris();
		tetris.setVisible(true);
	}

}
 

Anhänge

Hintergrundbilder würde ich auf das JPanel zeichnen(paintComponent Methode überschreiben und drawImage benutzen, ein Beispiel-Panel findet sich hier)
 
Danke jetz gehts!

Java:
package Tetris;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class Tetris extends JApplet {
	
	private static final long serialVersionUID = -8185750808184067061L;

	ImagePanel background;
	
	Board board;
	
	JPanel test;

	public Tetris()
	{
		
		setFocusable(true);

		
		background = new ImagePanel(getClass().getResource("/images/background.png"));
		
		add(background);
		
		board = new Board(20, 20, 30, (byte)10 ,(byte)20 );
		
		add(board);
		
		
	}
	
	public void init() {
		Tetris tetris = new Tetris();
		tetris.setVisible(true);
	}

}


class ImagePanel extends JPanel {

	private static final long serialVersionUID = 4719780719878918271L;
	
	private Image img;

	  public ImagePanel(URL img) {
	    this(new ImageIcon(img).getImage());
	  }

	  public ImagePanel(Image img) {
	    this.img = img;
	    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
	    setPreferredSize(size);
	    setMinimumSize(size);
	    setMaximumSize(size);
	    setSize(size);
	    setLayout(null);
	  }

	  public void paintComponent(Graphics g) {
	    g.drawImage(img, 0, 0, null);
	  }

}
 
Ich hab noch ein Jpanel erstellt, dass mit drawString einen text zeichnet. allerdings wird es immer von den anderen Panels überdeckt. hab schon die reihenfolge der add() geändert, ohne erfolg. der hintergrund von board ist schon durchsichtig. Warum landet das score panel immer im hintergrund?


Java:
package Tetris;
import javax.swing.*;
import java.awt.*;
import java.net.URL;
public class Tetris extends JApplet {
	
	private static final long serialVersionUID = -8185750808184067061L;

	ImagePanel background;
	
	Board board;
	
	Score score;

	public Tetris()
	{
		
		setFocusable(true);

		
		
		background = new ImagePanel(getClass().getResource("/images/background.png"));
		
		add(background);
		
		score = new Score();
			
		add(score);
		
		score.repaint();
		
		board = new Board(20, 20, 30, (byte)10 ,(byte)20 );
		
		add(board);
		
		
		
	}
	
	public void init() {
		Tetris tetris = new Tetris();
		tetris.setVisible(true);
	}

}


class ImagePanel extends JPanel {

	private static final long serialVersionUID = 4719780719878918271L;
	
	private Image img;

	  public ImagePanel(URL img) {
	    this(new ImageIcon(img).getImage());
	  }

	  public ImagePanel(Image img) {
	    this.img = img;
	    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
	    setPreferredSize(size);
	    setMinimumSize(size);
	    setMaximumSize(size);
	    setSize(size);
	    setLayout(null);
	  }

	  public void paintComponent(Graphics g) {
	    g.drawImage(img, 0, 0, null);
	  }

}



Java:
package Tetris;

import java.awt.*;

import javax.swing.*;


public class Score extends JPanel{
	
	private static final long serialVersionUID = 8997017456497329316L;
	
	public int level;
	public int points;
	public int lines;
	
	public Score()
	{
		setBackground(new Color(0, 0, 0, 0));
		setOpaque(false);
		resetScore();
	}
	
	
	public void addLine()
	{
		lines++;
		points = points + 10 + level*2;
	}
	
	public void resetScore()
	{
		level=0;
		points=0;
		lines=0;
	}

	public void paintComponent(Graphics g)
	{
		g.setColor(Color.WHITE);
		g.drawString("Level: "+level, 500, 500);
	}
}
 

Neue Themen


Zurück
Oben