Question

Je suis nouveau sur Java. J'essaie simplement de construire un fichier .jar de mon applet afin de pouvoir l'exécuter à partir de mon navigateur. Voici à quoi ressemble ma structure de répertoires:

C:\java\pacman\src

contient tous les fichiers de classe .java.

C:\java\pacman\assets

contient environ 4 à 5 images et fichiers audio.

Si j'essaie d'utiliser le code suivant:

Image someFile=getCodeBase().toString() + "file.png";

Le résultat de getCodeBase () est

.
file:/C:/java/pacman/bin/

Toutefois, le code suivant ne parvient pas à se charger:

   img=new ImgHelper(getCodeBase().toString() + "assets/");
   ImageIO.read(new File(img.getPath("pacman.png")));

Déplacer mon dossier "assets" vers le dossier "bin" n'a pas résolu le problème non plus. Il essaie de charger:

file:/C:/java/pacman/bin/assets/pacman.png

disant:

Can't read input file!

Mais l'URL qu'il a donné s'ouvre correctement si je le colle dans le champ d'exécution et appuie sur Entrée:

Donc pour éviter beaucoup de maux de tête, j'ai commenté le code de ma classe ImgHelper et j'ai fait ceci:

public ImgHelper(String dir)
{
    //this.imgDir=dir;
    imgDir="C:\\java\\pacman\\assets\\";
}

Ce qui fonctionne parfaitement. Mais je veux mettre ceci sur un serveur web, et je n'ai aucune idée de ce que je devrais faire pour que toutes les images et tous les sons fonctionnent. Des idées?

Merci ...

Était-ce utile?

La solution

Pourquoi ne pas tout mettre dans un fichier JAR, puis appeler Class.getResourceAsStream?

Un fichier JAR est préférable car il s’agit d’une connexion HTTP unique plutôt que d’une connexion HTTP par fichier. Il est également beaucoup plus souple d'utiliser un flux qu'un fichier.

getResourceAsStream fonctionnera également lorsque les fichiers ne sont pas dans un fichier JAR, ils doivent être relatifs au fichier de classe.

EDIT:

Autre chose, la méthode File ne fonctionnera pas si l'applet est sur un serveur car elle essaiera d'ouvrir le fichier à partir de la machine locale (je pense que je ne l'ai pas essayée) plutôt que du serveur. Même s’il essayait de créer un chemin de fichier sur le serveur qui ne fonctionnerait pas.

Autres conseils

Je suis d'accord avec tofubeer sur le fichier JAR, mais si vous souhaitez placer l'image sur votre serveur, consultez le didacticiel sur les images d'applet ici . La base de code correspond à l’emplacement de votre applet sur le serveur et vous pouvez également placer des images correspondantes sur le serveur. Utilisez un outil de suivi des médias avec la méthode Applet.getImage () pour récupérer l'URL. De l'exemple:

 my_gif = getImage(getDocumentBase(),"imageExample.gif");

Il existe deux solutions possibles qui fonctionneraient:

  • Les images peuvent être présentes en dehors de l’applet JAR. L'applet pourrait alors être initialisé avec l'emplacement du répertoire où les images sont présentes. Une fois que vous avez cette information, vous pouvez alors charger des images à partir du serveur. Le tutoriel Sun Java fournit un exemple d'utilisation du paramètre de l'applet pour passer le répertoire source de l'image.
  • Le chargeur de classe d'applet peut être utilisé pour charger les images à partir du fichier JAR de l'applet, à l'aide de la méthode getResourceAsStream ().

PS: Il serait utile que vous vous référiez à la section tutoriels Java pour charger des icônes pour votre application . La même section traite de nombreux points soulevés par TofuBeer et John .

EDIT: l'utilisation de l'API de fichier n'est pas recommandée car elle finit par lire le système de fichiers local. Cela est inacceptable pour la plupart des utilisateurs d’Internet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top