"错误或错误"显示java.lang.NullPointerException

时间:2015-04-14 02:33:16

标签: java swing nullpointerexception jframe

我试图像我一样创建我的JFrame,但我不知道它为什么会抛出java.lang.NullpointerException。

我读到这是因为你没有; t对一个值,或null可以; t可以用作一个值,但我几乎可以肯定我的代码是正确编写的。

这是:

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 个答案:

答案 0 :(得分:2)

您永远不会将home变量初始化为任何对象,因此如果您尝试从其中调用方法,您将看到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,然后尝试在类中创建另一个?

关于&#34;美丽&#34;代码 - 您将需要学习Java的代码格式规则。你不应该随机缩进代码,而应该将单个块中的所有代码缩进相同的数量。

关于:

  

我读到这是因为你没有设置一个值,或者null不能用作值但是WTF,我的意思是我几乎可以肯定我的代码写得正确。

这意味着你还没有理解它对于指定一个值&#34;意味着什么。这与声明变量(见上文)不同,并且在Java书的大多数介绍的第一页中都有很好的解释。请注意,Swing GUI编程是Java编程的一个相当高级的分支,在开始进行GUI编程之前,首先阅读一些基本的教程教程可能会更好。


这将是另一种创建类似于您尝试创建的GUI的方法:

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();
         }
      });
   }
}