Jump to content
MacgyverPT

[Resolvido][Duvida] BlueJ e 2 classes

Recommended Posts

MacgyverPT

Boas.

Tenho aqui um pequeno problema que me anda a dar volta a cabeça.

Tenho estas 2 classes:

Classe 1: EverythingCounts

import acm.graphics.*;
import acm.program.*;
import acm.gui.*; 
import acm.util.*; 
import acm.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.applet.*;

public class EverythingCounts extends GraphicsProgram 
{
   private final static int SIZE = 100;
   
   private Target target;
   
   public void EverythingCounts()
   {
      this.target = new Target(Color.RED, EverythingCounts.SIZE);
      this.addMouseListeners();
   }
   
    public void run()
    {
        //colocar o jogo a funcionar!
        (new IODialog()).println("Ready?");
        this.playGame();
    }
    
    private void playGame()
    {
       this.add(this.target);
       this.target.resetCounter();
    }
} 

Classe 2: Target:

(aqui os import são os mesmos, eu retirei para poupar espaço)

public class Target extends GCompound
{
   private int    counter;
   public  GOval  biggestCircle;
   public  GOval  middleCircle;
   public  GOval  insideCircle;   
   
   public Target(Color color, int size)
   {
      //put the counter on zero
      this.counter = 0;
      
      //Draw the circles to create the full target
      this.biggestCircle = new GOval(size, size, size, size);
      this.biggestCircle.setFilled(true);
      this.biggestCircle.setFillColor(color.RED);
      
      //(desenha mais 2 círculos com os nomes: middleCircle e insideCircle)
      
      this.add(this.biggestCircle);
   }

   public void resetCounter()
   {
      this.counter = 0;
   }

}

O meu problema é, quando faço o compilar, ele faz tudo bem sem erros, mas quando executo, da um erro na linha "this.add(this.target);" da primeira classe e diz o seguinte:

java.lang.NullPointerException

at acm.graphics.GCanvas.add(GCanvas.java)

at acm.program.GraphicsProgram.add(GraphicsProgram.java)

at EverythingCounts.playGame(EverythingCounts.java:40)

at EverythingCounts.run(EverythingCounts.java:34)

at acm.program.Program.runHook(Program.java)

at acm.program.Program.startRun(Program.java)

at acm.program.Program.start(Program.java)

at acm.program.Program.start(Program.java)

(...) repete o mesmo, mas alterando as vezes o nº da linha (...)

O mais estranho, e que eu resolvi um exercício anterior que é praticamente o mesmo (so precisei de alterar o nome da classe) e funcionou... so neste é que nao quer trabalhar... Alguem me dá uma dica pra resolver isto?

Cump.

MoffspringR

Share this post


Link to post
Share on other sites
pedrotuga

Bem, realmente estás a inicilizar o atributo Target no construtor. Não estás a aceder ao método playgame estaticamente?

Caso contrario o problema não me parece estar neste código.

Experimenta ver o que se passa no construtor, se tiveres um debugger à mão, coloca lá um breakpoint no inicio do construtor. Se não experimentar colocar uns System.out.println("whatever") no inicio e no fim do construtor. Envia o atributo target para o output para ver o que ele tem.

Share this post


Link to post
Share on other sites
Baderous

Bem, realmente estás a inicilizar o atributo Target no construtor.

O problema está aí. Aquilo não é um construtor, é um método. E se o add depender do construtor, é óbvio que target vai ser null porque não foi inicializado.

Share this post


Link to post
Share on other sites
MacgyverPT

Boas.

Ja andei com o código pra trás e pra frente e não encontro maneira de resolver isto... to ficando saturado! Se no guia que fiz deu, porque é que aqui não dá? Muito estranho...

Share this post


Link to post
Share on other sites
MacgyverPT

Agora esta a funcionar. Mas la esta, continuo a nao perceber porque e que no guia que fiz anteriormente funcionava e agora não... O codigo é o mesmo (so altera o nome da classe principal - Em vez de ser MovingTargets passou a ser EverythingCounts)

Edit:

Done! Obrigado pelas dicas!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.