Forum: Nullpointer exvept, java problem?

Forum huvudsida -> Programmering -> Nullpointer exvept, java problem?

Sidor: 1

Till botten

Dread 14:49 - 27:e Oktober 2007 | Post #1
Medlem
Inlägg: 135


Skicka PM
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import se.lth.cs.ptdc.window.SimpleWindow;
  4. import se.lth.cs.ptdc.shapes.Shape;
  5.  
  6. public class Circle extends Shape{
  7.  
  8. public ArrayList<Point> collisionList;
  9. private int radian;
  10.  
  11. public Circle(int x, int y, int radian){
  12. super(x,y);
  13. this.radian = radian;
  14. makeCollisionList();
  15. }
  16. /**
  17. * Ritar upp Cirkeln i fönstret w
  18. **/
  19. public void draw(SimpleWindow w){
  20. Iterator<Point> colIt = collisionList.iterator();
  21. while (colIt.hasNext()){
  22. w.lineTo(colIt.next().getX(), colIt.next().getY());
  23. }
  24.  
  25.  
  26. }
  27. /**
  28. *gör en kollisionslista
  29. **/
  30. private void makeCollisionList(){
  31. int dir = 0;
  32. int startX = x;
  33. int startY = y;
  34. calculateXY(radian, dir, startX, startY);
  35. while (dir <= 361){
  36. collisionList.add(new Point(x,y));
  37. calculateXY(radian, dir, startX, startY);
  38. dir++;
  39. }
  40.  
  41. }
  42.  
  43. /**
  44. * Räknar ut nästa punkts positioner i cirkeln
  45. **/
  46. private void calculateXY(int n, int dir, int startX, int startY) {
  47. double radians = Math.toRadians(dir);
  48. x = startX +(int) Math.round(n * Math.cos(radians));
  49. y = startY + (int) Math.round(n * Math.sin(radians));
  50.  
  51. }
  52. }


Får ett null pointer exception vid "collisionList.add(new Point(x,y));" men kan inte för mitt liv begripa varförSmiley
får samma fel i min triangel.

Tanken är att jag ska göra ett simpelt ritprogram som kan rita trianglar, cirklar och kvadrater. Sen ska man trycka på linjerna för att flytta dem. ,,r det jag implementerar för tillfället. För gjorde först så att programmet ritar ut. Så ändrade jag och gjorde så att man sparar positionerna i en klass, Point, som rent tekniskt sett "bara" sparar x, y kordinaterna.

Kan det vara att java inte gillar att man kör en iterator i en iterator?

typ
  1. while(iterator.hasNext()){
  2. iterator.next().draw();
  3. }

Sen ser draw() funktionen ut som i cirkelklassen ovan?

Och jo, jag misstänker att det inte är ett optimalt sätt att kolla ifall man har tryckt på en linje. kanske göra så att +-5 pixlar från linjerna också.
(alternativa tankar om hur jag ska kolla om man trycker på linjerna:)
Var inne på att göra en snabbare kontrollering, genom en kollisionscirkel, alternativt en kollisions kvadrat. Kollisionskvadraten är jag ganska säker på hur jag ska få till, men kollisionscirkeln vet jag inte.

Kan posta mer källkoder om det behövs, men tror detta räcker för att ge en beskrivning av mitt problem.



-------------------------
c++



Slash 16:25 - 27:e Oktober 2007 | Post #2
Medlem
Inlägg: 141


Skicka PM
Ser ut som att det skulle kunna vara så att du glömt
att initiera collisionList-variabeln någonstans. Eller ser jag helt galet?

-------------------------
Ingen sigantur!



Dread 17:21 - 27:e Oktober 2007 | Post #3
Medlem
Inlägg: 135


Skicka PM
överst i koden? har gjort så innan i koden och funkade när jag bara ritade utan att bry mig om att skapa pointobjekt för att hålla reda på positionerna.

-------------------------
c++



Slash 19:14 - 27:e Oktober 2007 | Post #4
Medlem
Inlägg: 141


Skicka PM
Så här tänkte jag:
  1. public ArrayList<Point> collisionList; // collisionList initieras till null


Så att när du sen kör
  1. collisionList.add(... // Yikes, NullPointerException


-------------------------
Ingen sigantur!



Dread 23:19 - 27:e Oktober 2007 | Post #5
Medlem
Inlägg: 135


Skicka PM
arraylist är en standard funktion i java. Mer eller mindre är det en vektor, med obestämd längd, och add(object) är en funktion som lägger till ett värde i "vektorn".

-------------------------
c++



Slash 09:27 - 28:e Oktober 2007 | Post #6
Medlem
Inlägg: 141


Skicka PM
    Citat av Dread:
arraylist är en standard funktion i java. Mer eller mindre är det en vektor, med obestämd längd, och add(object) är en funktion som lägger till ett värde i "vektorn".


Det var ju inte riktigt det jag tänkte på. Du kan inte köra metoder på ett null-objekt, det ger NullPointerException.

  1. private ArrayList<Point> collisionList = new ArrayList();


Eller i konstrueraren
  1. public Circle() {
  2. collisionList = new ArrayList();



-------------------------
Ingen sigantur!



Dread 09:37 - 28:e Oktober 2007 | Post #7
Medlem
Inlägg: 135


Skicka PM
hmmm, okej, men har initierat utan new ArraList(), innan i koden och då funka det, märkligt, men funka om jag gjorde som du skrev.

tack så mycket!

-------------------------
c++

Senast redigerad 09:38 - 28:e Oktober 2007


Sidor: 1

Forum huvudsida -> Programmering -> Nullpointer exvept, java problem?
Atom feed

Du får inte posta i den här tråden | Till toppen