2015-04-14 3 views
0

Я пытаюсь создать свой JFrame, как и всегда, но не знаю, почему он генерирует исключение java.lang.NullpointerException.«Ошибка или ошибка» java.lang.NullPointerException

Я читал, что это произошло потому, что вы не указали значение или значение null может использоваться как значение, но я почти уверен, что мой код написан правильно.

Здесь:

import javax.swing.*; 

public class Mathme extends JFrame { 
    JFrame home;  
    JLabel title; 

    public Mathme(){ 
     home.setResizable(false);   !!!13!!!! 
     home.setLocationRelativeTo(null);    
     home.setVisible(true); 
     home.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     home.setSize(600,500); 
     home.setTitle("Pruebax1"); 
    }  

    public static void main(String[] args) { 
     Mathme c = new Mathme(); !!!!23!!! 
    } 
} 

И бросает именно это:

***Exception in thread "main" java.lang.NullPointerException 
    at mathme.Mathme.<init>(Mathme.java:13) 
    at mathme.Mathme.main(Mathme.java:23) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 1 second)*** 

вложу номер строки, который называется там.

+1

Вы никогда не присвоить значение 'дома' ... – MadProgrammer

+0

Пожалуйста заканчивать [Java Variable декларации vs. Assignment] (http://stackoverflow.com/questions/2614072/java-define-terms-initialization-declaration-and-assignment). –

ответ

2

Вы никогда не инициализируете домашнюю переменную каким-либо объектом, поэтому имеет смысл, что вы увидите NPE, если попытаетесь вывести методы из него.

т.е.

// this declares a variable but doesn't assign anything to it 
JFrame home; // home is not assigned and is currently null 

и не

// this both declares a variable and assigns an object reference to it. 
JFrame home = new JFrame(); 

Кроме того, почему вы класс продлить JFrame, а затем попытаться создать еще один в классе?

Что касается "прекрасного" кода - вам нужно изучить правила форматирования кода Java. Вы не должны отступать код случайным образом, но, скорее всего, весь код в одном блоке должен иметь отступы одинаковой суммы.

Относительно:

Я читал, что это потому, что вы Asign вратаря значение, или нуль наклоняю использовать в качестве значения, но WTF, я имею в виду Im почти уверена, что мой код написан правильно.

Это означает, что вы еще не понимаете, что значит «присваивать значение», которое отличается от объявления переменной (см. Выше) и которое хорошо объяснено на первых страницах большинства вступлений в Java книга. Обратите внимание, что программирование GUI Swing - довольно продвинутая ветвь Java-программирования, и вам, скорее всего, будет лучше сначала пройти некоторые базовые учебники по книгам перед тем, как перейти в графическое программирование.


Это будет еще один способ, чтобы создать графический интерфейс, похожий на то, что вы пытались создать:

import java.awt.Dimension; 
import javax.swing.*; 

@SuppressWarnings("serial") 
public class MathmePanel extends JPanel { 
    private static final int PREF_W = 600; 
    private static final int PREF_H = 500; 

    public MathmePanel() { 
     // create my GUI here 
    } 

    // set size in a flexible and safe way 
    @Override 
    public Dimension getPreferredSize() { 
     Dimension superSize = super.getPreferredSize(); 
     if (isPreferredSizeSet()) { 
     return superSize; 
     } 
     int prefW = Math.max(PREF_W, superSize.width); 
     int prefH = Math.max(PREF_H, superSize.height); 
     return new Dimension(prefW, prefH); 
    } 

    private static void createAndShowGui() { 
     MathmePanel mainPanel = new MathmePanel(); 

     // create JFrame rather than override it 
     JFrame frame = new JFrame("Pruebax1"); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.getContentPane().add(mainPanel); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     // Start Swing GUI in a safe way on the Swing event thread 
     SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      createAndShowGui(); 
     } 
     }); 
    } 
}