2014-03-08 3 views
-2

Это мой код: есть и JPanel, если вам это нужно, но я почти уверен, что работает JPanel. Проблема, которую я испытываю, заключается в том, что мой JPanel не отображается на JFrame. Большое спасибо за Вашу помощь.У меня возникли проблемы с исключением null-указателя и JFrames

package projectz; 

import java.awt.Component; 
import javax.swing.*; 
import java.awt.event.*; 

public class ProjectZ extends JFrame implements ActionListener, KeyListener { 
    int scale = 2; 
    int playerx = 0; 
    int playery = 0; 
    Backround back; 
    JLayeredPane pane; 



    public ProjectZ(){ 
     super("This game"); 
     setSize(250 * scale, 250 * scale); 
     setFocusable(true); 
     setFocusTraversalKeysEnabled(true); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setResizable(false); 
     setVisible(true); 
     back = new Backround(playerx, playery); 
     Component add; 
     add = pane.add(back); 

    } 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body  of generated methods, choose Tools | Templates. 
    } 

    @Override 
    public void keyTyped(KeyEvent ke) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    @Override 
    public void keyPressed(KeyEvent ke) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    @Override 
    public void keyReleased(KeyEvent ke) { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    public static void main(String[] args){ 
     ProjectZ z; 
     z = new ProjectZ(); 
    } 

} 
+3

Если вы получаете NPE, трассировка стека этого исключения должна быть частью вашего вопроса. И вы должны сказать, какая строка в вашем коде NPE. Как бы то ни было, мне просто кажется, что вы не называете 'pack()' после добавления компонента. – kdgregory

ответ

2

Во-первых (хотя это не ваша конкретная проблема), вы создаете свой JFrame в основной теме. Это будет проблемой позже, когда вы приступите к реализации событий действий. Вместо этого используйте ProjectZ, а затем используйте EventQueue.invokeLater(...) в своем основном методе, чтобы настроить его. Это гарантирует, что вы используете свой пользовательский интерфейс на EWT, а не в основном потоке, и что он будет оставаться отзывчивым.

С уважением ваши фактические проблемы, трудно сказать без трассировки стека из NullPointerException (это скажет вам, что конкретно указатель является недействительным и, таким образом, где проблема ), но что касается видеть компонент, если вы setVisible(true)после вы добавили компонент, который в это время аннулирует (а затем повторите проверку) иерархию компонентов и затем должен быть нарисован ваш компонент .

EDIT: Другие справедливо отметили, что JLayeredPane объект, используемый никогда не был создан экземпляр. Трассировка стека расскажет об этом тоже.

2

Вы не инициализировали pane. Когда вы пишете add = pane.add(back);, pane имеет значение null, и именно поэтому вы получаете NullPointerException.

2

В дополнение к вопросам @ Smalltown2k упоминает:

Вы не инициализирован pane.
Итак, когда вы позвоните, pane.add(back), pane будет null, и вы получите NPE.

Смежные вопросы