2012-11-16 66 views
1

我想繪製一個基於隨機數組的數字圖片。到目前爲止,我已經取得了部分成功,因爲背景顏色(白色)確實出現了。java NullPointerException當試圖繪製

但是,圖片沒有繪製。相反,我看到的是白色背景,這樣的錯誤:

PixelAvatarGen 
XphnX 
Black and white or 8-bit color? 
0 = B&W, 1 = 8bit 
1 
Print name to make into avatar. 
2 
5:2:7:0:3:6:7:0:6:7:7:3:1:4:0:6:5:1:7:4:0:0:5:6:6:3:0:2:3:7:2:4:7:5:4:2:3:6:0:1:4:1:6:4:1:1:1:5:7:5:1:5:4:0:4:5:1:5:6:0:5:4:6:0:0:6:0:0:0:6:7:5:2:6:4:0:1:1:1:7:0:2:1:4:0:2:3:3:3:3:2:6:6:2:6:4:2:7:5:4:7:3:3:3:1:5:1:6:1:3:4:6:0:1:1:2:5:7:4:1:0:2:4:4:4:6:3:7:7:1:0:6:3:6:3:7:6:5:2:5:5:3:5:3:5:4:4:7:0:5:7:4:2:4:5:7:1:0:3:2:7:7:2:3:5:5:2:7:5:6:6:7:4:3:0:7:4:7:1:0:0:7:4:4:3:7:6:0:4:2:7:6:7:3:2:4:2:7:3:0:5:6:6:7:7:2:2:0:2:5:7:6:5:1:0:6:1:5:2:0:7:0:7:0:4:1:0:3:4:3:7:7:4:4:2:7:0:7:4:7:1:6:1:4:4:2:4:7:3:0:4:4:6:6:3:5: 
Drawing11 
Exception in thread "AWT-EventQueue-0" Drawing11 
java.lang.NullPointerException 
at xphnx.pixelgen.Screen.paintComponent(Screen.java:25) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JLayeredPane.paint(Unknown Source) 
at javax.swing.JComponent.paintChildren(Unknown Source) 
at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source) 
at javax.swing.RepaintManager.paint(Unknown Source) 
at javax.swing.JComponent.paint(Unknown Source) 
at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source) 
at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source) 
at sun.awt.SunGraphicsCallback.runComponents(Unknown Source) 
at java.awt.Container.paint(Unknown Source) 
at java.awt.Window.paint(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.access$700(Unknown Source) 
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$200(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at xphnx.pixelgen.Screen.paintComponent(Screen.java:25) 
at javax.swing.JComponent.paint(Unknown Source) 
at javax.swing.JComponent.paintToOffscreen(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source) 
at javax.swing.RepaintManager$PaintManager.paint(Unknown Source) 
at javax.swing.RepaintManager.paint(Unknown Source) 
at javax.swing.JComponent._paintImmediately(Unknown Source) 
at javax.swing.JComponent.paintImmediately(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source) 
at javax.swing.RepaintManager.access$700(Unknown Source) 
at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source) 
at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$200(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 

這是程序的完整輸出。在0 = B & W之後的「1」和「將名稱打印到...」之後的「2」是用戶輸入。

這裏是Screen.java:

public class Screen extends JPanel { 

    String[] pixels; 
    Color[] proxlol; 

    public Screen(String[] in1, Color[] in2) { 
    in1 = pixels; 
    in2 = proxlol; 
    } 

    public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    this.setBackground(Color.WHITE); 
    int row = 1, column = 1, row10, column10; 
    for(int i = 0; i != 256; i++) { 
     System.out.println("Drawing" + row + column); 
     g.setColor(proxlol[i]); 
     if(i == 17 || 
      i == 33 || 
      i == 49 || 
      i == 65 || 
      i == 81 || 
      i == 97 || 
      i == 113 || 
      i == 129 || 
      i == 145 || 
      i == 161 || 
      i == 177 || 
      i == 193 || 
      i == 209 || 
      i == 225 || 
      i == 241 
     ){ 
     row++; 
     column = 1; 
     } 
     row10 = row*10; 
     column10 = column*10; 
     g.fillRect(row10, column10, 10, 10); 
     System.out.println("Done drawing" + row + column); 
     column++;  
    } 
    } 
} 

在情況需要時,Main.javaArranger.java上引擎收錄。

我之前對Swing沒有太多經驗。這是怎麼回事?

+1

在附註中,下次請將***代碼的相關部分直接包含到問題中。你的異常棧跟蹤指出你問題實際發生的方向是正確的。 – Perception

+0

那裏有什麼魚? –

+0

另請參見['PiRaster'](http://stackoverflow.com/a/7298492/230513)。 – trashgod

回答

5

你永遠不會爲你的類變量proxlol賦值。

public class Screen extends JPanel { 
    String[] pixels; 
    Color[] proxlol; 

    public Screen(String[] in1, Color[] in2) { 
     in1 = pixels; 
     in2 = proxlol; 
    } 
} 

分配(沒有效果)未初始化類變量輸入參數in2。所以,在你的繪畫方法中,當你引用顏色數組時,你會得到一個NPE。

+0

基本上,我有變數倒退。謝謝。 – JXPheonix

相關問題