2014-05-23 2 views
1

Я пытаюсь создать массив прямоугольников для формирования сетки игр, и по какой-то причине, когда прямоугольники должны быть нарисованы, я получаю несколько исключений Nullpointer. Я не уверен, что это связано с тем, как я устанавливаю координаты x, y, ширину, высоту или что-то еще полностью. Через мое тестирование кажется, что это не имеет никакого отношения к нему, но я могу ошибаться.Исключение Nullpointer при рисовании Rectangle2D array

public class NewClass extends Frame { 

    Rectangle2D[][] rectangelMatrix = new Rectangle[4][5]; 
    int width = 25; 
    int height = 25; 
    int x = 0; 
    int y = 0; 

    public NewClass() { 
     setSize(1000, 1000); 
    } 

    public void arraysi() { 
     for (int i = 0; i < rectangelMatrix.length; i++) { 
      y = y + height; 
      for (int j = 0; j < rectangelMatrix[i].length; j++) { 
       x = x + width; 
       rectangelMatrix[i][j] = new Rectangle(x, y, width, height); 

      } 
     } 
    } 

    public void paint(Graphics g) { 
     System.out.println("hi"); 
     Graphics2D g2d = (Graphics2D) g; 
     for (int i = 0; i < rectangelMatrix.length; i++) { 
      for (int j = 0; j < rectangelMatrix[i].length; j++) { 
       // EXCEPTION THROWN FROM LINE BELOW 
       g2d.draw(rectangelMatrix[i][j]); 
      } 
     } 
    } 

    public void coolios() { 
     repaint(); 
    } 
} 

методы вызываются из тха основного класса следующим образом:

arraysi() 
coolios() 

EDIT: Вот лог -

exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at java.awt.geom.Path2D$Float.<init>(Path2D.java:215) 
at java.awt.geom.Path2D$Float.<init>(Path2D.java:190) 
at sun.java2d.windows.GDIRenderer.doShape(GDIRenderer.java:204) 
at sun.java2d.windows.GDIRenderer.draw(GDIRenderer.java:236) 
at sun.java2d.pipe.ValidatePipe.draw(ValidatePipe.java:136) 
at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2336) 
at NewClass.paint(NewClass.java:64) 
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248) 
at sun.awt.RepaintArea.paint(RepaintArea.java:224) 
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:310) 
at sun.awt.windows.WWindowPeer.handleEvent(WWindowPeer.java:695) 
at java.awt.Component.dispatchEventImpl(Component.java:4706) 
at java.awt.Container.dispatchEventImpl(Container.java:2099) 
at java.awt.Window.dispatchEventImpl(Window.java:2478) 
at java.awt.Component.dispatchEvent(Component.java:4460) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
+0

ОК, где выбрано nullPOinterexception? – Stultuske

+0

Показать LogCat – elbaulp

+0

Отформатировать ваше сообщение в первую очередь есть много пустое место – dharr

ответ

-3

Я не уверен, но попробуйте сделать я и ямайских как начало от 1? Может работать.

+1

Индексы массивов начинаются с нуля в Java. – Paolo

0

Я думаю, вы должны позвонить

super.paint(g); 

от рисуете метод.

0

Я проверить свой класс кадра, как показано ниже, она работает без исключения:

public static void main(String[] args) { 
     NewClass frame = new NewClass(); 
     frame.setVisible(true); 
     frame.arraysi(); 
     frame.coolios(); 
} 

Я предлагаю вам использовать Свинг JFrame вместо этого, но не использовать SWT Frame. И вам лучше поместить рисунок прямоугольника в панель, а затем добавить панель в рамку.