CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Utilisation JButton etc, HELP

Yozamu
Yozamu
Niveau 10
21 octobre 2013 à 00:18:05

Je sais pas ce que c'est en fait :hap:

C'est la liste entière des erreurs ?

Bunyan
Bunyan
Niveau 17
21 octobre 2013 à 07:46:01

Java est très bavard.

Lorsqu'il y a une quelconque exception, tu as toute une série de lignes, plus ou moins longue indiquant l'exception, et la pile d'exécution la précédent.

En déclenchant manuellement une exception, j'ai obtenue celle-ci :
Exception in thread "main" java.lang.NullPointerException
at com.fr.yozamu.Jeu.main(Jeu.java:233)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ
e
Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native
MethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(De
legatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main
(AppMain.java:120)

J'ai une NullPointerException, indiquant que l'on invoque une méthode sur un objet null (ou que l'on passe en paramètre un objet null et qu'il n'est pas géré par la méthode).
Celle-ci a été déclenchée dans le package com.fr.yozamu, dans la classe Jeu, à la ligne 223.
Le reste de la pile d'exécution ne me concerne pas.

A chaque fois que tu auras une exception en Java, tu auras une stacktrace (si tu ne pars pas dans la mauvaise pratique de faire des catch vide...) qui t'indiquera d'où vient l'erreur, pourquoi et comment.
Dans plus de 75% des cas, la stacktrace est suffisante pour comprendre et corriger le problème.

Yozamu
Yozamu
Niveau 10
21 octobre 2013 à 17:20:35

Oui oui en fait je vois ce que c'est, c'est juste le terme qui m'était inconnu.
Globalement ça m'a beaucoup servi au débuggage, mais là je dois dire que j'ai du mal...
J'ai relancé le programme, je joue jusqu'à la fin quand la surface doit etre calculée et j'obtiens ceci:

Exception in thread "main" java.lang.NullPointerException
at Joueur.surface(Joueur.java:79)
at Jeu.main(Jeu.java:122)

J'ai la méthode surface qui se trouve dans la classe Joueur, mais le problème ne vient pas du code lui même, car avant de supprimer la méthode joue() de la classe Jeu, je faisais exactement le même appel (enfin j'appellais la méthode surface) et tout se déroulait parfaitement bien. Je dois avoir raté quelque chose quand j'ai passé le code dans le main à la place de dans joue()

Bunyan
Bunyan
Niveau 17
21 octobre 2013 à 18:06:18

Tu as clairement un problème dans la méthode surface de ta classe Joueur.
Peut-on la voir, s'il te plaît ?
En surlignant la ligne 79, celle qui pose problème ?

Yozamu
Yozamu
Niveau 10
21 octobre 2013 à 18:30:08

Je vais poster le passage qui pose problème, cependant je ne vais pas pouvoir modifier ce fichier Joueur, car le fichier Jeu en mode "interface graphique" ne sera qu'un bonus en complément de la version normale, qui fonctionne parfaitement avec les autres fichiers!

Mais donc je la montre quand meme:

public double surface(){
double aire = 0;
for(int i=0;cercles.length-1;i++){
aire+=Math.PI*cercles[i].getRayon()*cercles[i].get
Rayon();

}
}

Avec cercles[i] la liste contenant les cercles du joueur et getRayon la méthode de la classe Cercle qui... Donne le rayon

Bunyan
Bunyan
Niveau 17
21 octobre 2013 à 21:17:04

Voir cette méthode permet de savoir ce qui déconne ;)

Ici, cela semble être la mise à jour du tableau "cercles", ou alors le getRayon qui renvoi un null (ce qui serait aberrant, sauf si cette méthode renvoi un Float ou un Double au lieu de leur équivalent type primitif).

Vérifie donc la mise à jour de la surface de chaque joueur.

J'ai l'impression qu'aucun de tes joueurs ne possèdent de surface, que la valeur n'est jamais mise à jour, ou du moins, que les données permettant de calculer n'existent pas. En regardant ton code d'ajout de cercle, je ne vois aucune méthode de mise à jour des données du joueur. Ne devrait-il pas être notifié de ce nouveau cercle en sa possession ?

Yozamu
Yozamu
Niveau 10
22 octobre 2013 à 19:10:48

Non non, cette méthode, surface, fonctionne.
Ou du moins fonctionnait!

Quand on crée un cercle, en plus de le déplacer, peut changer de rayon au fil du temps. On ne calcule jamais la surface car on en a besoin SEULEMENT si le jeu se termine au bout d'un certain nombre de tours, car le jeu peut se terminer avant (c'est l'énoncé, on calcule la surface seulement une fois, à la fin).

Comme je l'ai dit, avant de transformer le fichier Jeu.java pour avoir une interface graphique, cette méthode Fonctionnait! J'ai fait plusieurs parties et la surface était correctement calculée. Exactement ce bout de code marchait(d'apres mon premier post):

public void joue() throws IOException {
int compteur = 0;
while(pasFini && compteur++ < NB_DE_COUPS_MAX) {
if(premierJoueur)
System.out.println("Joueur 1: quelle action ?");
else
System.out.println("Joueur 2: quelle action ?");
action(premierJoueur);
premierJoueur = !premierJoueur;
}
if(compteur == NB_DE_COUPS_MAX+1) {
double s1 = j1.surface();
double s2 = j2.surface();

Et maintenant cela ne fonctionne plus

String[]args
String[]args
Niveau 23
22 octobre 2013 à 19:32:38

" for(int i=0;cercles.length-1;i++){ "
" Non non, cette méthode, surface, fonctionne. "

=> Je sais pas comment il s'en sortait alors, parce que la condition de ton for ressemble à rien. :noel:

Yozamu
Yozamu
Niveau 10
22 octobre 2013 à 23:32:23

Heu je sais pas, pourquoi il est où le problème ? :(

Bunyan
Bunyan
Niveau 17
22 octobre 2013 à 23:41:57

As-tu compris ce que j'ai écris ?
Je n'ai pas écrit que ta méthode surface déconnait, relis mieux :)

A priori, dans ton jeu, chaque joueur dessine des cercles à tour de rôle. Ceux-ci sont utilisé pour calculer la surface de chaque joueur en fin de partie.
Je me cite : " En regardant ton code d'ajout de cercle, je ne vois aucune méthode de mise à jour des données du joueur. Ne devrait-il pas être notifié de ce nouveau cercle en sa possession ? "

Et je persiste, signe et contresigne. Tu demandes un calcul de valeur de surface à partir de cercles... qui n'existent pas. Tu ne mets pas à jour les données des joueurs les concernant : tu n'utilises plus la méthode Joueur#ajouteUnCercle, qui devait justement ajouter un cercle dans la tableau interne cercles du joueur correspondant pour calculer la surface.

Et sinon, oui, String[]args souligne un bon problème. Regarde bien la condition d'arrêt de la boucle qu'il a cité, ça devrait te sauter aux yeux :)

Yozamu
Yozamu
Niveau 10
23 octobre 2013 à 00:32:14

Bah il me semble que la méthode est utilisée...

http://pastebin.com/j3PteGC9
Ligne 176, on ajoute le cercle.

Et après le for faudra que je test, c'est bizarre qu'avant il me donnait la bonne surface alors que le for a toujours été comme ça :(

Yozamu
Yozamu
Niveau 10
24 octobre 2013 à 12:00:32

Oulah oui en effet, y'avait un problème avec le for.
J'ai trouvé l'erreur finalement, et tout marche correctement maintenant!

Merci pour votre aide en tout cas!

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment