IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

Affichage page vierge sans raison


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut Affichage page vierge sans raison
    Bonjour à tous,

    J'ai un problème depuis plusieurs jours que je n'arrive pas à résoudre. Je tiens à préciser que je poste mon sujet dans cette catégorie car c'est en rapport avec la conséquence mon problème, mais que le problème vient peut-être d'ailleurs.

    Je vais essayer d'être clair: Je dois programmer un jeu du "Picross" pour un projet personnel (si vous ne connaissez pas, le but est de cliquer sur des cases en s'aidant d'indice dans le but de découvrir un dessin à la fin). Pour cela je créé un tableau pré-remplis de "0" (case blanche) ou de "1" (case noir), mais lorsque ce tableau est présent, la fenêtre d'affichage de mon jeu renvoie une page blanche.

    Voici le code de la classe Partie gérant, donc, la partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public class Partie {
     
        //Initialisation des variables de classes
        int nbCaseParLigne;
     
        //Tableau posant problème: si je le met en commentaire, l'affichage est normal, sinon j'obtient une page blanche.
        int tabSolution[][]={{0,1,1,1,0},{1,1,1,1,1},{0,0,1,0,0},{0,0,1,0,0},{0,0,1,1,0}};
        int tabReponse[][];
     
     
        public Partie(int nbCaseParLigne){
     
     
            int numLigne, numColonne, erreur=0;
            this.nbCaseParLigne = nbCaseParLigne;
     
            tabReponse = new int[nbCaseParLigne][nbCaseParLigne];
     
     
            Fenetre jeu = new Fenetre(nbCaseParLigne);
     
            while(!(partieTerminee())){
     
                numLigne = jeu.ligneCase;
                numColonne = jeu.colonneCase;
     
                if ((tabSolution[numLigne][numColonne])==1){
                    jeu.caseNoire(numLigne, numColonne);
                    tabReponse[numLigne][numColonne]=1;
                } else {
                    jeu.croixRouge(numLigne, numColonne);
                    erreur +=1;
                    tabReponse[numLigne][numColonne]=(-1);
                }
            }
     
        }
    Et voici le code de la classe Fenetre gérant l'affichage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    public class Fenetre extends JFrame {
     
        JLabel[][] tableauJlabel;
        JPanel panelJeu = new JPanel();
     
        ImageIcon blanc;
        ImageIcon noir;
        ImageIcon croixRouge;
     
        int nbCase;
     
         int ligneCase;
         int colonneCase;
     
        public Fenetre(int a) {
     
     
            super("Picross");
            this.setSize(800, 800);
            this.setResizable(false);
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setVisible(true);
     
     
            nbCase = a;
     
            //assignation d'un Layout à nos panels
            panelJeu.setLayout(null);
     
     
            //création tableau JLabel
            tableauJlabel = new JLabel[nbCase][nbCase];
     
            //choix des images pour les JLabels
            if(nbCase == 5){
                blanc = new ImageIcon("blanc5.jpg");
            }
            if(nbCase == 10){
                blanc = new ImageIcon("blanc10.jpg");
            }
            if(nbCase == 20){
                blanc = new ImageIcon("blanc20.jpg");
            }
     
     
              if(nbCase == 5){
                noir = new ImageIcon("noir5.jpg");
            }
            if(nbCase == 10){
                noir = new ImageIcon("noir10.jpg");
            }
            if(nbCase == 20){
                noir = new ImageIcon("noir20.jpg");
            }
     
     
            if(nbCase == 5){
                croixRouge = new ImageIcon("croix5.jpg");
            }
            if(nbCase == 10){
                croixRouge = new ImageIcon("croix10.jpg");
            }
            if(nbCase == 20){
                croixRouge = new ImageIcon("croix20.jpg");
            }
     
     
     
            //dimensionnement de nos JLabel pour une grille de 5
            if (nbCase == 5) {
                for (int i = 0; i < nbCase; i++) {
                    for (int j = 0; j < nbCase; j++) {
                        tableauJlabel[i][j] = new JLabel();
                        tableauJlabel[i][j].setBounds(150 + (100 * i), 150 + (100 * j), 100, 100);
                        tableauJlabel[i][j].setIcon(blanc);
                        panelJeu.add(tableauJlabel[i][j]);
                        this.setContentPane(panelJeu);
                    }
                }
            }
     
              /*    //ajout des écouteurs sur la grille
                for (int i = 0; i < nbCase; i++) {
                    for (int j = 0; j < nbCase; j++) {
                        //la ligne problématique depuis hier
                        //tableauJlabel[i][j].addMouseListener(this);
                    }
                }
     
     
            }*/
     
            //dimensionnement de nos JLabel pour une grille de 10
            if (nbCase == 10) {
                for (int i = 0; i < nbCase; i++) {
                    for (int j = 0; j < nbCase; j++) {
                        tableauJlabel[i][j] = new JLabel();
                        tableauJlabel[i][j].setBounds(150 + (50 * i), 150 + (50 * j), 50, 50);
                        tableauJlabel[i][j].setIcon(blanc);
                        tableauJlabel[i][j].setText("B");
                        panelJeu.add(tableauJlabel[i][j]);
                        this.setContentPane(panelJeu);
                    }
                }
            }
     
     
            //dimensionnement de nos JLabel pour une grille de 10
            if (nbCase == 20) {
                for (int i = 0; i < nbCase; i++) {
                    for (int j = 0; j < nbCase; j++) {
                        tableauJlabel[i][j] = new JLabel();
                        tableauJlabel[i][j].setBounds(150 + (25 * i), 150 + (25 * j), 25, 25);
                        tableauJlabel[i][j].setIcon(blanc);
                        tableauJlabel[i][j].setText("B");
                        panelJeu.add(tableauJlabel[i][j]);
                        this.setContentPane(panelJeu);
                    }
                }
            }
     
     
     
            this.setContentPane(panelJeu);
        }
    Les autres classes ne me semblent pas importantes pour ce problème, si vous pensez que le problème vient de celles-ci, je vous les fournirai.

    Je ne trouve aucune solution rationnelle à ce problème, je remercie donc tous ceux qui m'aideront à ce sujet.

    Je restes bien sûr à votre disposition en cas de problème,

    Merci d'avance,

    Toine52000

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Par défaut
    Bonjour,

    Il faudrait tester pour te dire en détail donc je vais te donner mon impression ne pouvant pas tester actuellement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       for (int j = 0; j < nbCase; j++) {
                        tableauJlabel[i][j] = new JLabel();
                        tableauJlabel[i][j].setBounds(150 + (100 * i), 150 + (100 * j), 100, 100);
                        tableauJlabel[i][j].setIcon(blanc);
                        panelJeu.add(tableauJlabel[i][j]);
                        this.setContentPane(panelJeu);
                    }
    setContentPane => tu dis à ta Jframe que ton panelJeu devient le panel par défaut il n'a pas de layout.

    Dessus tu rajoutes des JLabel qui sont blanc que tu places avec ton équation de setBounds.

    Si le JPanel contient bien les JLabel blanc disposé avec ton équation sa me surprendrai pas de voir une page toute blanche ou alors j'ai raté un truc.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Tout d'abord merci de vouloir m'aider.

    En faites, on ajoute des ImageIcon sur nos JLabel, mes images ne sont pas vraiment blanches (c'est leurs noms mais elles ont en faites un effet d'ombre) donc elles devraient clairement ressortir sur le fond. De plus elles ne prennent pas toute la fenêtre, mais sont concentrées au milieu.

    Comme je l'avais dis le programme marche bien sans le tableau, mais avec ce dernier l'affichage est blanc...

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    commence déjà par afficher ta console java et nous dire ce qu'il y a. En général quand t'as un fenetre vide, c'est qu'une exception a été levée au moment de la remplir. Il serait donc utile de la connaitre

  5. #5
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    En voyant ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    while(!(partieTerminee())){
     
                numLigne = jeu.ligneCase;
                numColonne = jeu.colonneCase;
     
                if ((tabSolution[numLigne][numColonne])==1){
                    jeu.caseNoire(numLigne, numColonne);
                    tabReponse[numLigne][numColonne]=1;
                } else {
                    jeu.croixRouge(numLigne, numColonne);
                    erreur +=1;
                    tabReponse[numLigne][numColonne]=(-1);
                }
            }
    je me dis que ça me rappelle des souvenirs
    http://www.developpez.net/forums/d21...ue-boucle-for/

    Tu effectue un traitement de longue durée, appelé directement depuis le main de ton programme. Pendant la durée de ce traitement, c'est à dire, si j'ai compris ton programme, toute la durée de la partie, le rafraîchissement ne se fera pas.
    => Les traitements longs doivent s'exécuter dans un nouveau Thread:
    http://gfx.developpez.com/tutoriel/j...ing-threading/

  6. #6
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Citation Envoyé par Jidefix Voir le message
    je me dis que ça me rappelle des souvenirs
    http://www.developpez.net/forums/d21...ue-boucle-for/

    Tu effectue un traitement de longue durée, appelé directement depuis le main de ton programme. Pendant la durée de ce traitement, c'est à dire, si j'ai compris ton programme, toute la durée de la partie, le rafraîchissement ne se fera pas.
    => Les traitements longs doivent s'exécuter dans un nouveau Thread:
    http://gfx.developpez.com/tutoriel/j...ing-threading/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Fenetre jeu = new Fenetre(nbCaseParLigne);
     
            while(!(partieTerminee())){
     
                numLigne = jeu.ligneCase;
                numColonne = jeu.colonneCase;
     
                if ((tabSolution[numLigne][numColonne])==1){
                    jeu.caseNoire(numLigne, numColonne);
                    tabReponse[numLigne][numColonne]=1;
                } else {
                    jeu.croixRouge(numLigne, numColonne);
                    erreur +=1;
                    tabReponse[numLigne][numColonne]=(-1);
                }
            }
    Peut-être que je me trompe, mais comme tu le vois j'instancie un nouvel objet Fenetre avant d'entrer dans cette bouche, alors pourquoi cette dernière "freezerais" mon affichage? A la rigueur ne l'actualiserais pas je veux bien, mais ne peux l'afficher au départ je ne comprend pas.

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    commence déjà par afficher ta console java et nous dire ce qu'il y a. En général quand t'as un fenetre vide, c'est qu'une exception a été levée au moment de la remplir. Il serait donc utile de la connaitre
    Aucune exception n'a été levé, en faites le programme est toujours en "run" et ne s'arrête jamais, la fenêtre restant toujours blanche et ma console toujours vide...

  8. #8
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Par défaut
    Tu es en boucle infinie avec ton While, la fenêtre se lance mais passe directement à ton traitement while en boucle infinie puisque ta partie ne se termine pas. D'où la remarque de Jidefix, avec la mise en place d'un Thread.

    Juste pour être sûr :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    while(!(partieTerminee())){
      System.out.println("Test");
    ou juste après ta fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    try{
    Thread.sleep(10000);
    catch(InterruptedException e){}
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/05/2014, 14h39
  2. Réponses: 1
    Dernier message: 12/06/2006, 14h34
  3. Page s'exécutant sans raison apparente
    Par j_bolduc dans le forum ASP
    Réponses: 4
    Dernier message: 23/02/2006, 16h33
  4. ma base gonfle sans raison !!!
    Par hiul dragonfel dans le forum Access
    Réponses: 6
    Dernier message: 20/06/2005, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo