通常,我從我不理解Java的基本方面得到的錯誤,但無論我研究多少,我似乎都無法找出背後的問題。初始化非靜態JPanel時的偶然nullpointerexception
基本上,如果我初始化一個數非靜態JPanel
S的,或延伸JPanel
(或JFrame
)任何類,那麼我偶爾獲得java.lang.NullPointerException
。
即使我不使用時面板的所有&從來沒有一次調用paintComponent
方法,只是他們的行爲被初始化導致異常,甚至&然後它只是偶爾發生。
這對我來說很奇怪,因爲該程序仍然繪製一切都沒有明顯的問題,&沒有我已經注意到故障。也許每六七次發生一次,當它發生時,它只會在程序啓動時發生,而不會在使用它的過程中發生。
我覺得它不適合我設置一個基本的GUI不正確或什麼,&如果任何人需要進一步解釋什麼代碼我可以發佈更多。
這是我第一次在這裏發佈,所以我不知道要展示什麼,但我注意到人們經常包含錯誤消息,所以我已經包含了它。在錯誤消息中,它顯示類別SButton
,Table
,TableGrid
,DelegateManager
,Mouse
,mainPanel
和mainFrame
。這些是我編碼的類,&我覺得NullPointerException
可能在某些Graphics
對象中,無法初始化或者其他東西。這只是一個猜測,真的。
在哪裏,我認爲錯誤在於是在mainFrame
,延伸JFrame
,當paintComponents(Graphics g)
方法被調用時,發送g
到mainPanel
,其擴展JPanel &使用其paintComponent(Graphics g)
方法,然後將g
到Mouse
,它採用我定義draw(Graphics g)
方法,其接着發送到g
TableGrid
,其使用draw(Graphics g)
,它發送到g
Table
,這也有它自己的draw(Graphics g)
和fill(Graphics g)
方法,其延伸SButton
,其中也有一個draw(Graphics g)
和fill(Graphics g)
甲基消耗臭氧層物質。
每當Graphics
對象傳遞下來時,接收它的類就吸取一些東西,然後將其傳遞給下一個類。由於例外包括所有這些類別,以及我定義的繪畫方法,因此我認爲例外情況可能存在於此處。
當我不初始化非靜態面板時,錯誤根本不會發生。我還初始化了&,它使用了大約四個靜態類,它們全部延伸到JPanel
,但它們似乎從來不會導致錯誤。另外,如果將某個對象「傳遞」下來,這樣每個對象都可以根據它所包含的屬性在屏幕上繪製自己,這對於製作程序來說是一種可怕的方式,對此我表示抱歉。我無法想出另一種方式來做到這一點。
問題甚至可能在於,&我只是看不到它。此外,可能會因爲重新繪製我稱爲mainFrame
的repaint()
方法的屏幕而產生錯誤,儘管我覺得這應該是不對的,因爲JFrame
不是JPanel
。它似乎工作,但我缺乏理解可能導致我只是使用錯誤的重繪方法。不過,如果我不初始化擴展爲JPanel
或JFrame
的非靜態對象,則不會發生錯誤。
總之,除了事實上,我只是真的很困惑,這裏是錯誤代碼:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at SButton.fill(SButton.java:82)
at Table.fill(Table.java:8)
at SButton.draw(SButton.java:75)
at Table.draw(Table.java:49)
at TableGrid.draw(TableGrid.java:74)
at DelegateManager.draw(DelegateManager.java:66)
at Mouse.draw(Mouse.java:61)
at mainPanel.paintComponent(mainPanel.java:49)
at javax.swing.JComponent.paint(JComponent.java:1037)
at javax.swing.JComponent.paintChildren(JComponent.java:870)
at javax.swing.JComponent.paint(JComponent.java:1046)
at javax.swing.JComponent.paintChildren(JComponent.java:870)
at javax.swing.JComponent.paint(JComponent.java:1046)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:567)
at javax.swing.JComponent.paintChildren(JComponent.java:870)
at javax.swing.JComponent.paint(JComponent.java:1046)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:34)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:60)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:97)
at java.awt.Container.paint(Container.java:1791)
at java.awt.Window.paint(Window.java:3390)
at javax.swing.RepaintManager$3.run(RepaintManager.java:836)
at javax.swing.RepaintManager$3.run(RepaintManager.java:802)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:802)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:745)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:725)
at javax.swing.RepaintManager.access$1000(RepaintManager.java:46)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1680)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:715)
at java.awt.EventQueue.access$400(EventQueue.java:82)
at java.awt.EventQueue$2.run(EventQueue.java:676)
at java.awt.EventQueue$2.run(EventQueue.java:674)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:685)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
如果需要更多的信息,我可以很高興地爲它供給。儘管如此,我只能想到這一點。如果任何人都能理解發生的事情,我會非常感激。另外,如果我在發佈此問題的方式中做了某些不正確的事情,請隨時通知我。
這裏發生了什麼:'SButton.java:82'? – Kai
這是我最近不得不閱讀的最混亂的問題之一...... [SSCCE](http://sscce.org/) – MadProgrammer
顯示您的源代碼目錄 – 2013-10-02 07:23:55