Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Disegnare in java.
Forum - Java - Disegnare in java.

Avatar
Matt (Member)
Pro


Messaggi: 131
Iscritto: 22/08/2006

Segnala al moderatore
Postato alle 11:48
Mercoledì, 01/11/2006
Salve a tutti, qualcuno mi sa dire dove ho sbagliato?????

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.Graphics;

public class palla {
    
    int altezza;
    int larghezza;
    int a;
    int b;
    Graphics g;
    JButton muovi;
    
    palla(){
        JFrame f = new JFrame();
        f.setLayout(new FlowLayout());
        muovi = new JButton("muovi");
        f.add(muovi);
        f.setSize(400, 700);
        f.setVisible(true);
        altezza = 15;
        larghezza = 15;
        b = 0;
        a =0;
        g.drawRect(a,b,altezza,larghezza);
        muovi.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent avvio){
                altezza++;
                larghezza++;
            }
            });
    }
    public static void main(String[] args){
    palla pallone = new palla();
    }
}

Mi da il seguente errore di runtime:
Exception in thread "main" java.lang.NullPointerException
    at palla.<init>(palla.java:28)
    at palla.main(palla.java:37).

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 13:30
Mercoledì, 01/11/2006
NullPointeException è un puntatore che punta a null quindi non inizializzato, vedendo il codice non ho visto l'inizializzazione di Graphics, per inizializzarlo dovresti fare se non ricordo male:

Codice sorgente - presumibilmente Plain Text

  1. g = componente.getGraphics();



(controlla sulla documentazione casomai)

cmq nei componenti dovresti ridefinire paintComponent(Graphics)

proverò il sorgente e ti saprò dire.

ciao

Ultima modifica effettuata da netarrow il 01/11/2006 alle 13:34
PM Quote
Avatar
Rand (Ex-Member)
Pro


Messaggi: 163
Iscritto: 17/05/2005

Segnala al moderatore
Postato alle 13:50
Mercoledì, 01/11/2006
a me lo compila senza errori col java 1.5 8-|

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 14:22
Mercoledì, 01/11/2006
infatti non è un problema di compilazione, ma è un eccezione che viene lanciata a Run-time visto che l'oggetto graphics viene usato senza essere inizializzato, l'oggetto g è un puntatore nullo.

PM Quote
Avatar
Black Shadow (Founder Member)
Expert


Messaggi: 323
Iscritto: 30/03/2006

Segnala al moderatore
Postato alle 14:51
Mercoledì, 01/11/2006
Esattamente, cmq credo che tu abbia dato già la giusta soluzione...:k:

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 15:01
Mercoledì, 01/11/2006
Ecco il sorgente che funziona, ho usato Canvas... però un pannello qualsiasi che ridefinisce paintComponents sarebbe andato cmq credo.

Codice sorgente - presumibilmente Java

  1. import javax.swing.*;
  2. import java.awt.event.*;
  3. import java.awt.*;
  4.  
  5. class lavagna extends Canvas {
  6. int altezza;
  7. int larghezza;
  8. int a;
  9. int b;
  10.  
  11. lavagna() {
  12. altezza = 15;
  13. larghezza = 15;
  14. b = 2;
  15. a =2;
  16. setVisible(true);
  17. setBackground(Color.red);
  18. setSize(200, 350);
  19. repaint();
  20. }
  21.  
  22. public void muovi() {
  23. altezza++;
  24. larghezza++;
  25. repaint();
  26. }
  27.  
  28. public void paint(Graphics g) {
  29.   g.drawRect(a, b, altezza, larghezza);
  30. }
  31.  
  32. }
  33.  
  34. public class palla {
  35.  
  36.  
  37. lavagna c = new lavagna();
  38. JButton muovi;
  39.  
  40. palla(){
  41. JFrame f = new JFrame();
  42. f.setLayout(new FlowLayout(FlowLayout.CENTER));
  43. muovi = new JButton("muovi");
  44. f.add(muovi);
  45. f.add(c);
  46. f.setSize(400, 700);
  47. f.setVisible(true);
  48.  
  49. muovi.addActionListener(new ActionListener(){
  50. public void actionPerformed(ActionEvent avvio){
  51. c.muovi();
  52. }
  53. });
  54. }
  55. public static void main(String[] args){
  56. palla pallone = new palla();
  57. }
  58. }



N.B a e b li faccio partire da 2 solo perchè non mi piaceva vedere solo metà quadratino :D, così è staccato dai bordi rimetti normale se vuoi ovviamente.
Canvas l'ho messa rossa per vederla bene; per adattare guarda sulla documentazione.

ciao

Ultima modifica effettuata da netarrow il 01/11/2006 alle 15:03
PM Quote
Avatar
Matt (Member)
Pro


Messaggi: 131
Iscritto: 22/08/2006

Segnala al moderatore
Postato alle 8:31
Giovedì, 02/11/2006
Grazie tanto!!!!:k:

PM Quote
Avatar
Rand (Ex-Member)
Pro


Messaggi: 163
Iscritto: 17/05/2005

Segnala al moderatore
Postato alle 17:10
Giovedì, 02/11/2006
Testo quotato

Postato originariamente da netarrow:

infatti non è un problema di compilazione, ma è un eccezione che viene lanciata a Run-time visto che l'oggetto graphics viene usato senza essere inizializzato, l'oggetto g è un puntatore nullo.



hai ragione netarrow nn avevo letto bene :k:

Ultima modifica effettuata da Rand il 02/11/2006 alle 17:11
PM Quote