Bilder aus jar einlesen

Fansana

Mitglied
Hallo, ich habe ein Frage.
Und zwar möchte ich für ein Project(ein kleines Game) Bilder im Voraus laden.
Ich denke das alle Bilder im Ram zu haben besser ist als die ständig neu zu laden.
Wie der Titel schon sagt möchte ich die Bilder aus der Jar laden in der sich auch mein Programm befindet.
Darüber hinaus möchte ich aber alle Bilder aus einem Ordner inerhalb der Jar Laden den ich vorher angeben kann.

Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package de.fansana.Handler;

import java.awt.image.BufferedImage;
import java.util.LinkedList;


/**
 * This class holds all Images.
 * getInstance is first called when the Programe enters the MenuStage/LoadingStage
 * @author fansana
 */
public class AssetHandler {
    private static AssetHandler instance;
    LinkedList<ImageItem> List = new LinkedList<ImageItem>();
    private int imageCount;
    private int imageLoaded;
    private AssetHandler(){
        
    }
    
    public static AssetHandler getInstance(){
        if(instance == null)instance = new AssetHandler();
        return instance;
    }
    public void loadImages(){
        loadImages(null);
    }
    
    public void loadImages(String path){
        if(path == null)
            path = "de/fansana/assets";

    }
    /**
     * 
     * @return percent in wich the loading of the Images is complete
     */
    public int getProgress(){
        return imageCount/imageLoaded*100;
    }
    
    
    private class ImageItem{
        private BufferedImage img;
        private String ID;
        public ImageItem(BufferedImage img, String ID){
            this.img = img;
            this.ID = ID;
        }
        public String getID(){
            return ID;
        }
        public BufferedImage getImg(){
            return img;
        }
    }
}

Ich hab mir dazu schon ein paar Sachen mit Zip u.s.w eingeschaut bin daraus aber nicht schlau geworden.
 

Joose

Top Contributor
Wenn du uns noch sagst wo genau dein Problem können wir bestimmt weiterhelfen.
"hab mir zwar ... angeschaut ... wurde daraus aber nicht schlau ..." ist eben keine passende Fehlerbeschreibung um "schnell" zu helfen.
 

Fansana

Mitglied
beschreibung wo ich hilfe bei brauch :
Wie der Titel schon sagt möchte ich die Bilder aus der Jar laden in der sich auch mein Programm befindet.
Darüber hinaus möchte ich aber alle Bilder aus einem Ordner inerhalb der Jar Laden den ich vorher angeben kann.

Ich habe keinen Fehler. Ich habe eine Frage.
 
Zuletzt bearbeitet:

Joose

Top Contributor
Was du machen willst habe ich schon verstanden.
Aber leider sehe ich keine Frage, daher auch dieses Verständnisproblem :)
 

Fansana

Mitglied
Ah ok,
Die Frage die ich habe ist:
Wie kann ich Bilder aus der Jar laden, in der sich das Programm befindet?
Dazu muss noch gesagt werden das ich dabei noch den Ordner angeben kann, weil nicht alle Bilder aus der Jar sind wichtig.
 
Zuletzt bearbeitet:

Fansana

Mitglied
Danke, :)
sehr hilfreich aber was mir noch fehlt ist das ich eine art Filelist bekomme wo alle dateinamen aus einem ordner enthalten sind.
 

Sogomn

Bekanntes Mitglied
Ich würde mir eine (statische) Methode schreiben, die ein Bild zurückgibt:

Java:
public static BufferedImage loadImage(final String path) {
   return ImageIO.read(MyClass.getResource(path));   //Wirft IOException, musst Du noch abfangen
}

Dann würde ich eine Resourcenklasse erstellen, welche die Bilder beim Start des Programms lädt.

Java:
public class Resources {
   public static final BufferedImage MY_IMAGE = ImageLoader.loadImage("/myImage.png");
}
 
Zuletzt bearbeitet:

Fansana

Mitglied
Ich habe die eine möglichkeit gefunden die es mir ermöglicht Bilder im IDE und im jar zu laden.
Das ganze sieht so aus.
Java:
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package de.fansana.Handler;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.security.CodeSource;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.imageio.ImageIO;


/**
 * This class holds all Images.
 * getInstance is first called when the Programe enters the MenuStage/LoadingStage
 * @author fansana
 */
public class AssetHandler implements Runnable{
    private static AssetHandler instance;
    LinkedList<ImageItem> ImageList = new LinkedList<ImageItem>();
    private double imageCount=1;
    private double imageLoaded=0;
    private Thread thread;
    private AssetHandler(){
        start();
    }
    
    public static AssetHandler getInstance(){
        if(instance == null)instance = new AssetHandler();
        return instance;
    }
    public synchronized void start(){
        thread = new Thread(this);
        thread.start();
    }
    public synchronized void stop(){
        try {
            thread.join();
        } catch (InterruptedException ex) {
            Logger.getLogger(AssetHandler.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    @Override
    public void run() {
        loadImages();
    }
    
    private void loadImages(){
        
        loadImages(null);
    }
    
    private void loadImages(String path){
        String s = File.separator;
        if(path == null)
            path = "de"+s+"fansana"+s+"assets"+s;
        try {
            if(inJar()){
                loadInJar(path);        
            } else {
                loadOutJar(path);
            }
        } catch (IOException ex) {
            Logger.getLogger(AssetHandler.class.getName()).log(Level.SEVERE, null, ex);
        }
        stop();

    }
    
    private void loadInJar(String path) throws IOException{
        String s = File.separator;
        CodeSource src = AssetHandler.class.getProtectionDomain().getCodeSource();
        List<String> list = new ArrayList<>();

        if( src != null ) {
            URL jar = src.getLocation();
            System.out.println(jar.toString());
            ZipInputStream zip = new ZipInputStream(jar.openStream());
            ZipEntry ze = null;
            int temp = 0;
            while( ( ze = zip.getNextEntry() ) != null ) {
                String entryName = ze.getName();
                if( entryName.startsWith(path) &&  entryName.endsWith(".png") ) {
                    list.add(entryName);
                    temp++;
                }
            }
            imageCount = temp;
            for(String entryName : list){
                System.out.println("Loading :" + entryName);
                ImageList.add(new ImageItem(ImageIO.read(getClass().getResource(s+entryName)),entryName.replaceFirst(path, "")));
                imageLoaded++;
            }
            System.out.println("Finished Loading");
        }
    }
    
    private void loadOutJar(String path) throws IOException{
        String s = File.separator;
        File f = new File("."+s+"src"+s+path);
        File[] FileArray = f.listFiles();
        imageCount = FileArray.length;
        if(FileArray != null){
            for (File FileArray1 : FileArray) {
                imageLoaded++;
                String src = "../assets/" + FileArray1.getName();
                ImageList.add(new ImageItem((BufferedImage) ImageIO.read(AssetHandler.class.getResourceAsStream(src)), FileArray1.getName()));
                System.out.println("Loaded: " + FileArray1.getName());
            }
        System.out.println("Finished Loading");
        }
    }
    
    
    private boolean inJar(){
        return System.getProperty("java.class.path").endsWith(".jar");
    }
    /**
     * 
     * @return percent in wich the loading of the Images is complete
     */
    public double getProgress(){
        return imageLoaded/imageCount*100;
        
    }

    
    
    private class ImageItem{
        private BufferedImage img;
        private String ID;
        public ImageItem(BufferedImage img, String ID){
            this.img = img;
            this.ID = ID;
        }
        public String getID(){
            return ID;
        }
        public BufferedImage getImg(){
            return img;
        }
    }
}

Der Code funktioniert für meine Zwecke muss warscheinlich angepasst werden.
Wenn jemand lust hat, ich freue mich über konstruktive kritik wie ich besser Coden kann.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
K Bilder/Dateien aus package einlesen Java Basics - Anfänger-Themen 14
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
W Java in Exe Datei umgewandelt, Ressourcen fehlen (Bilder und Audiodateien) Java Basics - Anfänger-Themen 1
B Nach dem kompilieren werden Bilder nicht mehr gefunden Java Basics - Anfänger-Themen 10
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
S Bilder über Socket Senden Java Basics - Anfänger-Themen 1
S Bilder in .jar Datei laden Java Basics - Anfänger-Themen 10
S Bilder zoomen Java Basics - Anfänger-Themen 0
S Kann keine Bilder laden? Java Basics - Anfänger-Themen 9
CptK Interface Bilder über Bildschirm bewegen, bis der Abstand zum vorherigen zu groß wird Java Basics - Anfänger-Themen 13
CptK Interface Bilder mit Graphics g zeichnen Java Basics - Anfänger-Themen 7
I Projekt als .jar Datei speichern - Bilder werden nicht mehr angezeigt Java Basics - Anfänger-Themen 4
x-tshainge Java Bilder einfügen Java Basics - Anfänger-Themen 1
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
DaCrazyJavaExpert Bilder werden nicht angezeigt! Java Basics - Anfänger-Themen 6
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
M Bilder in .Jar exportieren Java Basics - Anfänger-Themen 2
T Bilder in ausführbarer Jar Java Basics - Anfänger-Themen 11
F 2 wechselnde Bilder Java Basics - Anfänger-Themen 4
D Verzögerung des Erscheinens der Bilder Java Basics - Anfänger-Themen 5
L BufferdImage schwarzes Bild nach zusammenfügen zweier Bilder Java Basics - Anfänger-Themen 8
J Bilder in Labels aktualisieren Java Basics - Anfänger-Themen 2
T jpeg Bilder zoomen.. Java Basics - Anfänger-Themen 2
C Bilder von Festplatte in Programm hochladen Java Basics - Anfänger-Themen 6
S Wo speicher ich bilder und sounds ab? Java Basics - Anfänger-Themen 4
C Threads Threaded Bilder bearbeiten Java Basics - Anfänger-Themen 8
K Bilder mit Eclipse exportieren Java Basics - Anfänger-Themen 1
J Slideshow zeigt bilder nicht an Java Basics - Anfänger-Themen 3
R Bilder aus Array als anklickbare Objekte Java Basics - Anfänger-Themen 3
K Export nach Jar mit Bilder Java Basics - Anfänger-Themen 2
L Wie bette ich Bilder in eine .jar ein? Java Basics - Anfänger-Themen 4
C Pfad für Bilder angeben Java Basics - Anfänger-Themen 11
B Bilder laden und drauf zugreifen[Eclipse] Java Basics - Anfänger-Themen 9
E ImageJ mehrere Bilder hintereinander bearteiten Java Basics - Anfänger-Themen 2
E HILFE Projekt für die Schule--> Bilder einfügen Java Basics - Anfänger-Themen 9
D 2 Fragen: Position ändern vs. LayoutManager / Bilder einfügen im Vordergrund Java Basics - Anfänger-Themen 3
H Bilder ohne Verlust speichern Java Basics - Anfänger-Themen 2
J Ladebalken anzeigen während Bilder geladen werden Java Basics - Anfänger-Themen 2
R Bilder positionieren Java Basics - Anfänger-Themen 5
D Erstellte Jar datei zeigt keine Bilder an Java Basics - Anfänger-Themen 5
4 4kb bilder Java Basics - Anfänger-Themen 5
Q Pfadangabe für zu speichernde Bilder Java Basics - Anfänger-Themen 2
B Bilder speichern (jpg, gif, jpg) Java Basics - Anfänger-Themen 4
S Bilder einladen Java Basics - Anfänger-Themen 26
B Aus einem Eclipse Projekt eine .jar - keine Bilder drin Java Basics - Anfänger-Themen 7
H Bilder im GUI einfügen Java Basics - Anfänger-Themen 12
G Bilder in Jar anzeigen lassen Java Basics - Anfänger-Themen 23
T Bilder in der jar-datei Java Basics - Anfänger-Themen 10
H Zahlen Bilder zuordnen möglich? Java Basics - Anfänger-Themen 4
K BufferedImage, Bilder laden Java Basics - Anfänger-Themen 15
J Bilder von Objekten Java Basics - Anfänger-Themen 3
A Bilder in Eclipse speichern Java Basics - Anfänger-Themen 7
J Mit JS, Text und Bilder von Webseite verändern... Java Basics - Anfänger-Themen 10
S Input/Output Text und Bilder laden Java Basics - Anfänger-Themen 5
T Bilder werden in Jar nicht geladen Java Basics - Anfänger-Themen 10
S Java Web Start lädt keine Bilder Java Basics - Anfänger-Themen 2
T Buttons (auf denen bilder sind) random vertauschen Java Basics - Anfänger-Themen 11
D Bilder Laden, mit Eclipse ok, .jar nicht Java Basics - Anfänger-Themen 5
F Bilder aus .jar datei laden Java Basics - Anfänger-Themen 1
M Applet soll Bilder aus Ordner lesen Java Basics - Anfänger-Themen 9
T Transparente Bilder mit Graphics zeichnen Java Basics - Anfänger-Themen 17
F Bilder enfügen und Bewegen Java Basics - Anfänger-Themen 6
I Drehbare bilder in 3D Java Basics - Anfänger-Themen 4
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
T JTextPane - setText kein kein neuladen der Bilder? Java Basics - Anfänger-Themen 8
A Bilder in Eclipse Java Basics - Anfänger-Themen 8
xehpuk Ordner "Eigene Bilder" ansteuern Java Basics - Anfänger-Themen 3
N Bilder Objekten zuweisen Java Basics - Anfänger-Themen 2
J Bilder auf Bilder zeichnen Java Basics - Anfänger-Themen 8
N jar kann Bilder nicht finden(?) Java Basics - Anfänger-Themen 4
S Spiel automat -Bilder vergleichen Java Basics - Anfänger-Themen 3
R Gif Bilder flimmern Java Basics - Anfänger-Themen 10
P Signiertes JAR aber keine Bilder o0 Java Basics - Anfänger-Themen 6
S Bilder der Diashow werden in anderen Bildern angezeigt Java Basics - Anfänger-Themen 3
G Bilder aus dem Projekt Verzeichnis werden n. angezeigt Java Basics - Anfänger-Themen 7
C Bilder von Server zu Server kopieren über Webdav(Sardine) Java Basics - Anfänger-Themen 5
K Bilder "langsam" laden Java Basics - Anfänger-Themen 4
FreddyStepp Bilder zusammenfügen Java Basics - Anfänger-Themen 7
B GUI-Bilder einfügen Java Basics - Anfänger-Themen 40
S Bilder vergleichen Java Basics - Anfänger-Themen 6
B Kann man im Thread Bilder laden? Java Basics - Anfänger-Themen 8
S Wo speichere ich Bilder für Applets (Netbeans) Java Basics - Anfänger-Themen 5
J Mehrere Bilder laden Java Basics - Anfänger-Themen 6
D Bilder einfügen Java Basics - Anfänger-Themen 8
W Bilder einfügen? Java Basics - Anfänger-Themen 2
S Mehrere Bilder bewegen Java Basics - Anfänger-Themen 5
B Bilder zeichnen Java Basics - Anfänger-Themen 2
D Bilder in JFrame laden Java Basics - Anfänger-Themen 8
L Frage bzgl. Threads beim Bilder laden Java Basics - Anfänger-Themen 3
S Bilder in AWT Java Basics - Anfänger-Themen 7
J java applets bilder? Java Basics - Anfänger-Themen 11
manunana89 Bilder auf JFrame/beste Möglichkeit??? Java Basics - Anfänger-Themen 5
K Bilder werden nicht angeziegt !!! Java Basics - Anfänger-Themen 2
max56 Bilder ausgeben Java Basics - Anfänger-Themen 21
N Bilder verkleiner ausgeben Java Basics - Anfänger-Themen 6
G Bilder und Kattegorien Java Basics - Anfänger-Themen 4
S JTable - Bilder anzeigen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben