Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema JTable (NullPointerException)

    Ciao a tutti, scusate eventuali domande scontate ma sono uno studente al primo anno di specializzazione e sto cercando di capirne sempre di più. quindi grazie in anticipo a tutti quelli che avranno voglia di ascoltarmi o comunque a tutti quelli che hanno letto il mio messaggio fino a qua
    Bene veniamo al punto, mi trovo in questa situazione:
    devo fare un programma che mi calcoli la probabilità per il lancio di un dado e per il lancio di due dadi, il tutto con minimo 10^6 lanci di prova.
    ora, la prova con un dado è a posto, e lo sarebbe anche la seconda se non fosse che una volta che fa quello che deve mi stampa questo bel messaggio:
    Codice PHP:
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException      
    at Due_dadi
    $1.run(Due_dadi.java:73)      
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)      
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)      
    at java.awt.EventQueue.access$000(EventQueue.java:101)      
    at java.awt.EventQueue$3.run(EventQueue.java:666)      
    at java.awt.EventQueue$3.run(EventQueue.java:664)      
    at java.security.AccessController.doPrivileged(Native Method)      
    at --------  ecc ecc 
    La porzione di listato del programma in questione è la seguente:

    Codice PHP:

    public class Due_dadi extends javax.swing.JFrame {

        
    /**
         * Creates new form Due_dadi
         */
        
    long seed;
        
    int N;
        
    JTable[] tabelle={this.tabella1this.tabella2this.tabella3this.tabella4this.tabella5this.tabella6this.tabella7this.tabella8this.tabella9};

        
    int[] contatori={0,0,0,0,0,0,0,0,0,0,0};
        final 
    int[] contatori_fin={0,0,0,0,0,0,0,0,0,0,0};
        
        
        public 
    Due_dadi(long seedint n) {
            
    initComponents();
            
    this.seed=seed;
            
    this.N=n;
            
    scrivi_tabelle(n);
        } 
        
        public 
    void scrivi_tabelle(int N){
            
    Random r1=new Random(seed);
            
    double volte;
            
    int num;
            final 
    DefaultTableModel[] model={(DefaultTableModel)this.tabella1.getModel(), (DefaultTableModel)this.tabella2.getModel(), 
                                             (
    DefaultTableModel)this.tabella3.getModel(), (DefaultTableModel)this.tabella4.getModel(),
                                             (
    DefaultTableModel)this.tabella5.getModel(), (DefaultTableModel)this.tabella6.getModel(), 
                                             (
    DefaultTableModel)this.tabella7.getModel(), (DefaultTableModel)this.tabella8.getModel(), 
                                             (
    DefaultTableModel)this.tabella9.getModel()};
            final 
    double[] prob={0.027770.055550.083330.111110.138880.166660.138880.111110.083330.05555,0.02777};
            
            for(
    int i=1i<=N;i++){
                final 
    int j=i-1;
                
    volte=(Math.pow(10i));
                
    contatori=contatori_fin.clone();
                for(
    int q=(int)volteq>0q--){
                    
    num=r1.nextInt(6)+r1.nextInt(6);
                    switch(
    num){
                        case 
    0contatori[0]++; break;
                        case 
    1contatori[1]++; break;
                        case 
    2contatori[2]++; break;
                        case 
    3contatori[3]++; break;
                        case 
    4contatori[4]++; break;
                        case 
    5contatori[5]++; break;
                        case 
    6contatori[6]++; break;
                        case 
    7contatori[7]++; break;
                        case 
    8contatori[8]++; break;
                        case 
    9contatori[9]++; break;
                        case 
    10contatori[10]++; break;
                    }
                }
                for(
    int k=0k<=10k++){
                    
    model[j].addRow(new Object[]{(k+2), ((double)contatori[k]/volte), prob[k]});
                }
                
    SwingUtilities.invokeLater(new Runnable() {
                    @
    Override
                    
    public void run() {
                        
    tabelle[j].setModel(model[j]);
                        
    tabelle[j].paint(tabelle[j].getGraphics());
                    }
                });
            }

    Se può servire, come compilatore uso NetBeans...
    se vi servono info aggiuntive chiedete..
    vi prego di segnalarmi ogni errorre, nel tentativo di capire e imparare i più possibile, GRAZIE MILLE!!
    ciauuuuuuuuuuuuuu

  2. #2
    Una cosa che sicuramente dovrai carpire è che lo stacktrace delle eccezioni java è tuo "Amico"... in quanto ti dice esattamente quello che è successo.
    Venendo al tuo problema il tuo stacktrace ti dice che ha trovato un riferimento nullo alla riga 73 della classe Due_dadi (altro consiglio cerca di usare le convezioni java per la nomenclatura "DueDadi"), quindi nn ti resta altro che vedere cosa hai alla riga in questione ed analizzare quale riferimento possa essere nullo.
    Ciao

  3. #3
    il fatto è che io ho già guardato e controllato, e alla riga 73 c'è questo:
    Codice PHP:
                        tabelle[j].setModel(model[j]); 
    ora, riferendomi al listato postato precedentemente la variabile model[j] non può essere nulla!
    questo a meno che non si entri nel ciclo for, cosa che succede di sicuro, e ne ho la conferma perchè alla fine mi stampa tutte le tabelle....bah non capisco perchè fa quello che deve e in più da quel null pointer exception...qualcuno ha qualche idea?
    comunque grazie della risposta!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    147
    e tabelle[j]?? Dove istanzi le singole tabelle??

  5. #5
    qui istanzio il vettore:
    Codice PHP:
        JTable[] tabelle={this.tabella1this.tabella2this.tabella3this.tabella4,         this.tabella5this.tabella6this.tabella7this.tabella8this.tabella9}; 
    mentre ogni singola tabella viene creata in automatico dal compilatore, cioè crea questo:
    Codice PHP:
    tabella1 = new javax.swing.JTable();
    ----
            
    tabella3.setModel(new javax.swing.table.DefaultTableModel(
                new 
    Object [][] {

                },
                new 
    String [] {
                    
    "Somma Faccie""Frequenza""Probabilità"
                
    }
            ) {
                Class[] 
    types = new Class [] {
                    
    java.lang.Integer.class, java.lang.Double.class, java.lang.Double.class
                };
                
    boolean[] canEdit = new boolean [] {
                    
    falsefalsefalse
                
    };

                public Class 
    getColumnClass(int columnIndex) {
                    return 
    types [columnIndex];
                }

                public 
    boolean isCellEditable(int rowIndexint columnIndex) {
                    return 
    canEdit [columnIndex];
                }
            });
            
    jScrollPane3.setViewportView(tabella3);
            
    tabella3.getColumnModel().getColumn(0).setResizable(false);
            
    tabella3.getColumnModel().getColumn(1).setResizable(false);
            
    tabella3.getColumnModel().getColumn(2).setResizable(false); 

  6. #6
    E in fatti nel codice di inizializzazione manca tabella2 quindi mando j vale 1 ti da il null pointer exception...
    Ps
    il debugger del tuo ide ti è molto amico...

  7. #7
    si, scusa se non l'ho scritto, quello era l'esempio per la tabella1, poi ovviamente lo fa anche con tutte le altre, quindi non è li il problema....
    sta storia è strana perchè mi fa tutte le operazioni, compresa quella al rigo 73 poi alla fine mi da tanti null pointer quante sono le tabelle a cui ho assegnato il modello, infatto se io metto il rigo 73 e 74 dentro un try catch tutto fila liscio come l'olio senza dare il minimo problema...mi sembra un sacco strano!!
    per quanto riguarda il debugger ho imparato a usarlo proprio in questa occasione e non mi da nessuna variabile come null al rigo 73/74!!
    non so, grazie comunque!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.