2010-12-09 3 views
0

Après avoir passé 1 an à travailler sur Android, je suis un peu rouillé dans l'interface graphique Java traditionnelle.JApplets: Chargement d'images

J'ai besoin de savoir 2 choses dans la façon dont je suis ouverture Images

mais d'abord un code

/** 
    * Load the image for the specified frame of animation. Since 
    * this runs as an applet, we use getResourceAsStream for 
    * efficiency and so it'll work in older versions of Java Plug-in. 
    */ 
    protected ImageIcon loadImage(String imageNum, String extension) { 
     String path = dir + "/" + imageNum+"."+extension; 
     int MAX_IMAGE_SIZE = 2400000; //Change this to the size of 
     //your biggest image, in bytes. 
     int count = 0; 
     BufferedInputStream imgStream = new BufferedInputStream(
       this.getClass().getResourceAsStream(path)); 
     if (imgStream != null) { 
      byte buf[] = new byte[MAX_IMAGE_SIZE]; 
      try { 
       count = imgStream.read(buf); 
       imgStream.close(); 
      } catch (java.io.IOException ioe) { 
       System.err.println("Couldn't read stream from file: " + path); 
       return null; 
      } 
      if (count <= 0) { 
       System.err.println("Empty file: " + path); 
       return null; 
      } 
      return new ImageIcon(Toolkit.getDefaultToolkit().createImage(buf)); 
     } else { 
      System.err.println("Couldn't find file: " + path); 
      return null; 
     } 
    } 

Et je l'appelle comme ça

loadImage("share_back_img_1_512", "jpg"); 

Mon problème est le suivant: Comment le rendre plus dynamique. Pour l'instant, je suis en train de tester quelques images mais j'ai quelque chose comme 100 images pour l'applet finale.

Je devais stocker les images dans un paquet pour pouvoir y accéder.

Voici donc la question:

Est-il possible de charger des images en fonction du contenu d'un paquet? obtenir le nom, la taille, l'extension ...?

Fondamentalement, une façon plus simple de générer les ImageIcons

Répondre

1

La façon dont vous avez écrit votre flux lire - il pourrait en résulter une lecture partielle, car un seul appel à lire n'est pas garanti pour renvoyer tous les octets le flux peut éventuellement produire.

Essayez Apache Commons IOUtils # toByteArray (InputStream), ou inclure votre propre méthode utilitaire simple:

public static final byte[] readBytes(final InputStream is) throws IOException { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(Short.MAX_VALUE); 
    byte[] b = new byte[Short.MAX_VALUE]; 
    int len = 0; 
    while ((len = is.read(b)) != -1) { 
     baos.write(b, 0, len); 
    } 
    return baos.toByteArray(); 
} 

Quant à vos problèmes d'organisation ... il n'y a pas simple, + moyen fiable pour obtenir un « répertoire listage "du contenu d'un paquet. Les packages peuvent être définis sur plusieurs entrées de chemin de classe, couvrant les fichiers JAR et les dossiers et même les ressources réseau.

Si les paquets en question sont contenus dans un seul JAR, vous pourriez envisager de considérer quelque chose comme ce qui est décrit ici: http://www.rgagnon.com/javadetails/java-0513.html

Une façon plus fiable et portable pourrait être de maintenir un fichier texte qui contient une liste de les images à charger. Chargez la liste en tant que ressource, puis utilisez la liste pour effectuer une boucle et charger toutes les images répertoriées dans le fichier texte.

Questions connexes