Problème "NumberFormatExeption: null" sur Processing (Java)

Bonjour,
Comme écrit dans le titre, j'ai un problème avec mon programme de convertisseur binaire/décimale/hexadécimale que je dois faire pour la fin d'année.
Depuis plusieurs jours, j'essaie de faire les conversions Binaire>Décimale et Hexadécimale>Décimale mais dans grand succès ... Je pense être proche mais je rencontre toujours cette erreur ... Et je ne comprend vraiment pas pourquoi ... J'ai pourtant chercher sur internet mais c'est sans progrès.
Je m'en remet donc à vous pour m'aider à régler ce problème
Voici une capt d'écran pour illustrer

Merci d'avoir lu et merci d'avance si vous y répondez ^^

1 réponse

Résumé de la discussion

Un problème de conversion entre binaire, décimale et hexadécimale est au cœur du sujet, accompagné d'une NumberFormatException lors des conversions et d'une confusion sur le nombre de bits utilisés. Des réponses mettent en évidence l'importance d'initialiser correctement les chaînes comme hexadecimale et decimale, et d'éviter les chaînes vides qui provoquent l'échec lors de parseInt ou unhex. Pour corriger, certains suggèrent d'utiliser des conversions explicites en bases 2 et 16 et de privilégier Integer.parseInt avec le bon radix, puis Integer.toString pour obtenir le résultat souhaité. En pratique, la clé réside dans l'alignement des types et la vérification que les valeurs entrées ne restent pas nulles ou vides avant tout traitement, afin d'éviter des erreurs similaires lors des échanges binaire‑hexadécimal.

Bobot (l’IA à votre service)
  1. Modérateur
    Bonjour,

    Où est la variable hexadecimale ? Quelle est sa valeur ?
    Quel est le code de la méthode unhex ?
    1. Tout d'abord merci de t'intéresser à mon problème. ^^
      Voilà des cpt d'écran avec TOUT le programme ( dans l'ordre depuis le début ). S'il te manque quoi que se soit comme information n'hésite pas à me demander, c'est la moindre des choses quand quelqu'un répond =)
      - https://gyazo.com/7937858457e72ac0624b0cb29d26e18a
      - https://gyazo.com/e304e497ec4249ae496edae1944b5147
      - https://gyazo.com/751a57d8ef826da9032021136b7fc2e1
      - https://gyazo.com/ad6638a310344a826fc202bca17c66e3
      - https://gyazo.com/56ccf9445e7aa5d56698a4e0b89d4075

      Et voilà à quoi ressemble mon programme actuellement. Au final je voudrai enlever le 'radiobutton' en bas et juste avoir à appuyer sur une touche pour que la conversion se fasse mais je rencontre des situations que je ne connais pas comme afficher les résultats dans les 'textfield' ... Sur internet il y a rien :/
      - https://gyazo.com/d9c2a830fbf0c65f3d89d0f38e2c3b6b
    2. Modérateur
      @XaunCe n'est pas du Java tout ça... qu'est-ce que c'est ?

      De plus : ne mets pas ton code avec des impressions écrans sur des sites tiers.
      D'une part si tu veux mettre des images, tu le fais depuis CommentCaMarche, c'est plus facile à lire et ça évite qu'elles soient perdues.
      D'autre part si c'est pour mettre du code, tu fais un copier-coller, ça t'évite d'avoir à faire des captures d'écrans, et pour tester ou t'expliquer où est le problème ça nous permet de faire des copier-coller et te redonner le même code modifié.

      Tout ça se passe ici :
    3. D'accord, merci pour les conseils, je prend note ^^ C'est Processing (https://processing.org/ que j'utilise comme logiciel. C'est se qu'on utilise en 1ère STI2D SIN. Ce logiciel utilise le style Java. et voilà le code =)
      import processing.video.*;
      import controlP5.*;
      ControlP5 cp5;
      PFont font, mapolice;
      String decimale="", hexadecimale, binaire, message, binD, binH, hexB, hexD, decB;
      int D, B, H, value, i, decH=-1;
      Movie myMovie;
      RadioButton r;
      PGraphics pg;
      void setup()
      {
        size(730, 400);
        rect(400, 280, 730, 400); //Position vidéo
        myMovie = new Movie(this, "biinaire.mov");
        myMovie.loop();
      
        size(800, 500);
        mapolice = loadFont("BatmanForeverAlternate-22.vlw"); // Chargement de la police
        textFont(mapolice, 18);
      
        cp5 = new ControlP5(this);
      
        cp5.addTextfield("binaire")
          .setPosition(150, 100)
            .setSize(300, 40)
              .setFont(mapolice)
                .setFocus(true)
                  .setColor(color(#00B0FF));
      
      
        cp5.addTextfield("decimale")
          .setPosition(170, 200)
            .setSize(300, 40)
              .setFont(mapolice)
                .setFocus(true)
                  .setColor(color(#00B0FF));
      
      
        cp5.addTextfield("hexadecimale")
          .setPosition(230, 300)
            .setSize(300, 40)
              .setFont(mapolice)
                .setFocus(true)
                  .setColor(color(#00B0FF));
      
        r = cp5.addRadioButton("radioButton")
          .setPosition(120, 400)
            .setSize(300, 50)
              .setColorForeground(color(#00FFF0))
                .setColorActive(color(#00FFF0))
                  .setColorLabel(color(#00FFF0))
                    .setItemsPerRow(3)
                      .setSpacingColumn(150)
                        .addItem("", 1)
                          .activate(1);
      }
      
      void draw()
      {
        background(#393B3B); // Fond couleur gris
        fill(#00FFF0);
        strokeWeight(2); //Contour rectangle beige
        message=("Projet première STI2D SIN");
        text(message, 250, 40);
        message=("2015");
        text(message, 390, 60);
        fill(#202121);//Couleur gris sombre rectangle convertisseur
        rectMode(CENTER);// Rectangle convertisseur
        rect(400, 280, 730, 400);
        fill(#00FFF0);
        message=("Binaire >");
        text(message, 45, 125);
        message=("Decimale >");
        text(message, 45, 225);
        message=("Hexadecimale >");
        text(message, 45, 325);
        message=(">>>");
        text(message, 75, 430);
      /*
      
        //if (r.value()==1)//Si on clique sur le bouton 
        // {  
        //Decimale > Binaire
        D=int(decimale);
        binD=(binary(D, 8)); 
        println(decimale);
        println(binD);
        println(D);
      
        //Decimale > Hexadecimale
        D=int(decimale);
        hexD=(hex(D));  
        println(decimale);
        println(hexD);
        println(D);
      
        //Hexadecimale > Decimale
        String H = hexadecimale;
        int decH = unhex(H);
        println(hexadecimale);
        println(decH);
        println(H);
      
      
        //Binaire > Decimale
        String B = binaire;
        int decB = unbinary(B);
        println(binaire);
        println(decB);
        println(B);
        //  }
        */
      
        tint(255, 25);
        image(myMovie, 35, 80, 730, 400);
      }
      
      void movieEvent(Movie m) 
      {
        m.read();
      }
    4. Modérateur
      @Xaun"Ce logiciel utilise le style Java."
      On en est très loin...

      Pour en revenir à ma toute première intervention :

      "Où est la variable hexadecimale ?"
      C'est bon je l'ai trouvé, même si elle n'a rien à faire là (en tout cas pas en Java).

      "Quelle est sa valeur ?"
      J'ai l'impression que c'est bien là le problème, elle n'en as pas... d'où l'erreur au moment de s'en servir.

      "Quel est le code de la méthode unhex ?"
      Je ne l'est toujours pas, je ne peux pas savoir d'où vient exactement le NumberFormatException...
    5. @KX... Je t'assure que nous apprenons à nous servir de ce langage depuis maintenant 9 mois et c'est bien un style ( surement éloigné ) du Java actuel, enfin là n'est pas la question ^^ Pour le code de la méthode je pense que tu veut dire une exemple ? Je te donne donc l'exemple que j'utilise ( plus ou moins, plus moins ).

      unhex() --> Pour Hexadecimale vers Décimale
      String hs = "FF006699";
      int hi = unhex(hs);
      fill(hi);
      rect(30, 20, 55, 55);

      Et voici le lien : https://processing.org/reference/unhex_.html

      unbinary() --> Pour Binaire vers Décimale
      String s1 = "00010000";
      String s2 = "00001000";
      String s3 = "00000100";
      println(unbinary(s1));  // Prints "16"
      println(unbinary(s2));  // Prints "8"
      println(unbinary(s3));  // Prints "4"

      Lien : https://processing.org/reference/unbinary_.html