Jump to content

[Resolvido][Duvida] BlueJ e 2 classes


MacgyverPT
 Share

Recommended Posts

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

Link to comment
Share on other sites

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.

Link to comment
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
 Share

×
×
  • 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.