Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/12/2008, à 12:05

Laurent038

problème d'execution avec NetBeans mais pas avec javac

Bonjour,

J'essaye de me mettre au langage java pour développer une petite application graphique. Pour le moment mon code affiche juste une image dans un JPanel. La compilation avec NetBeans ne déclenche pas d'erreur, mais lors de l'exécution, mon image ne s'affiche pas. Si je compile avec javac, mon image s'affiche.
Comment je peux régler ce problème avec NetBeans?

Merci pour votre aide

#2 Le 16/12/2008, à 14:31

Laurent038

Re : problème d'execution avec NetBeans mais pas avec javac

J'ai vérifié les versions des JVM, netBeans et javac utilisent le JDK 1.6.
J'ai testé avec éclipse, j'ai le mémé problème qu'avec NetBeans.
C'est uniquement cette instruction qui ne marche pas: g.drawImage(image,0,0,null)
les autres composant graphique s'affiche bien!

#3 Le 17/12/2008, à 17:46

Laurent038

Re : problème d'execution avec NetBeans mais pas avec javac

Personne a une idée!
...
je continue de chercher alors!

#4 Le 17/12/2008, à 20:51

enguerran

Re : problème d'execution avec NetBeans mais pas avec javac

Un petit bout de code compilable permettant de reproduire ton problème serait le bienvenu ;-)


Ubuntu Lucid (qui fonctionne au poil ^^)

Hors ligne

#5 Le 18/12/2008, à 13:40

Laurent038

Re : problème d'execution avec NetBeans mais pas avec javac

voici mon code, merci pour votre aide.

 
package test;
 
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
 
import java.io.*;
 
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
 
import javax.imageio.*;
 
public class Map extends JFrame {
 
  //Variables d'instance
  protected MapPane mapPane;
  protected BufferedImage image;
  protected JSlider curseur = new JSlider(JSlider.VERTICAL, 1, 3, 1);
 
  /** Creates a new instance.
   * @exception Exception In case of errors.
   */
  public Map() throws Exception {
    //Initialisation du JPanel
    // Lecture de l'image par ImageIO en mode synchrone.
    image = ImageIO.read(new File("test.jpg"));
    //Ajout du contenu
    mapPane = new MapPane(image);
    //mapPane.setBorder(new TitledBorder("Map"));
    curseur.setMajorTickSpacing(1);
    curseur.setMinorTickSpacing(1);
    curseur.setPaintLabels(true);
    curseur.setPaintTicks(true);
    curseur.setSnapToTicks(true);
    curseur.addChangeListener(new ChangeListener() {
      /** {@inheritDoc}
       */
      public void stateChanged(ChangeEvent e) {
        JSlider curseur = (JSlider) e.getSource();
        int scale = curseur.getValue();
        mapPane.setScale(scale);
        repaint();
      }
    });
    setLayout(new BorderLayout());
    add(new JScrollPane(mapPane), BorderLayout.CENTER);
    add(curseur, BorderLayout.EAST);
  }
 
  /** Self-test main.
   * @param args Arguments from the command line.
   */
  public static void main(String ...args) {
    try {
      Map map = new Map();
      map.setSize(400, 400);
      map.setTitle("Test");
      map.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      map.setVisible(true);
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
 
  /** Displays the map.
   */
  private static class MapPane extends JPanel {
    private BufferedImage image;
    private int scale = 1;
 
    /** Creates a new instance with given image.
     * @param image The initial image.
     */
    public MapPane(BufferedImage image) {
      super();
      setImage(image);
    }
 
    /** Recalculer correctement la taille du panel.
     */
    private void recalculateAndResetSize() {
      int width = 0;
      int height = 0;
      // Tenir compte de la bordure optionnelle du panel.
      Insets insets = getInsets();
      width += insets.left + insets.right;
      height += insets.top + insets.bottom;
      // Tenir compte de la taille de l'image.
      if (image != null) {
        width += image.getWidth() * scale;
        height += image.getHeight() * scale;
      }
      Dimension size = new Dimension(width, height);
      setSize(size);
      setMinimumSize(size);
      setPreferredSize(size);
    }
 
    //////////////////////
    // Getters/Setters. //
    //////////////////////
 
    /** Sets the background image.
     * @param image The new image.
     * @see #getImage
     */
    public void setImage(BufferedImage image) {
      this.image = image;
      recalculateAndResetSize();
      repaint();
    }
 
    /** Gets the background image.
     * @return A <code>BufferedImage</code> instance.
     * @see #setImage
     */
    public BufferedImage getImage() {
      return image;
    }
 
    /** Sets the scale factor to given value.
     * @param value The new value.
     * @see #getScale
     */
    public void setScale(int value) {
      this.scale = value;
      recalculateAndResetSize();
      repaint();
    }
 
    /** Gets the scale factor.
     * @return An int.
     * @see #setScale
     */
    public int getScale() {
      return scale;
    }
 
    /** {@inheritDoc}
     */
    @Override public void setBorder(Border border) {
      super.setBorder(border);
      recalculateAndResetSize();
    }
 
    ////////////////
    // Rendering. //
    ////////////////
 
    /** {@inheritDoc}
     */
    @Override protected void paintComponent(Graphics graphics) {
      super.paintComponent(graphics);
      Graphics2D g2d = (Graphics2D) graphics;
      if (image != null) {
        Insets insets = getInsets();
        Dimension size = getSize();
        int panelWidth = size.width - (insets.left + insets.right);
        int panelHeight = size.height - (insets.top + insets.bottom);
        int scaledImageWidth = image.getWidth() * scale;
        int scaledImageHeight = image.getHeight() * scale;
        int x = (panelWidth - scaledImageWidth) / 2;
        int y = (panelHeight - scaledImageHeight) / 2;
        // Pour permettre au bord optionnel d'etre dessine.
        g2d.translate(insets.left, insets.top);
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
        g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
        g2d.drawImage(image, x, y, scaledImageWidth, scaledImageHeight, null);
        // Retour a l'origine du repere.
        g2d.translate( -insets.left, -insets.top);
      }
    }
  }
}

#6 Le 18/12/2008, à 15:46

enguerran

Re : problème d'execution avec NetBeans mais pas avec javac

Ben ça ne va pas vraiment t'avancer.. mais ça marche très bien sous Eclipse chez moi...

Pour info, j'utilise un jdk en version 1.6 et ma version d'eclipse est la 3.4.1. J'ai fait le test au boulot sur un Windows XP, je pourrai tester sur mon Ubuntu ce soir.

As-tu des erreurs dans la console eclipse lorsque tu lances ta classe ?

Dans ton code :

g2d.drawImage(image, x, y, scaledImageWidth, scaledImageHeight, null);

Quelle valeur te renvoie le "drawImage" ? (c'est un boolean)

Dernière modification par enguerran (Le 18/12/2008, à 15:57)


Ubuntu Lucid (qui fonctionne au poil ^^)

Hors ligne

#7 Le 18/12/2008, à 16:34

Laurent038

Re : problème d'execution avec NetBeans mais pas avec javac

la fonction drawImage, me renvoie true.
Je n'ai pas de message dans la console (netbeans). Je vais refaire des tests sur eclipse ce soir!

#8 Le 18/12/2008, à 21:01

Laurent038

Re : problème d'execution avec NetBeans mais pas avec javac

J'ai essayer de ré-installler netbeans ainsi que le JDK, et maintenant j'ai une erreur d'execution qui apparait:
        javax.imageio.IIOException: Can't read input file!
        at javax.imageio.ImageIO.read(ImageIO.java:1291)
        at Map.<init>(Map.java:25)
        at Map.main(Map.java:64)

il y a toujours aucun problème lorsque je compile avec javac.

#9 Le 19/12/2008, à 08:46

Laurent038

Re : problème d'execution avec NetBeans mais pas avec javac

J'ai trouvé le problème, mais je ne comprends pas!
si je donne le chemin absolu du fichier image tout fonctionne, mais si je mais je chemin relatif ça ne marche plus (aucune exception était levée avant la ré-installation).
l'image est pourtant bien dans le répertoire des fichiers .class ainsi que dans le répertoire des fichier .java

#10 Le 19/12/2008, à 09:01

enguerran

Re : problème d'execution avec NetBeans mais pas avec javac

Arf... ton fichier doit être à la racine de ton projet dans Eclipse pour qu'il soit "visible", et non au même niveau que tes classes/sources.

J'avais fait le test avec un chemin absolu >_<
Si j'utilise un chemin relatif et que mon fichier n'est pas à la racine du projet, Eclipse me crache bien une javax.imageio.IIOException dans la sa console.

N'oublie pas de mettre ton post en [Résolu]


Ubuntu Lucid (qui fonctionne au poil ^^)

Hors ligne