当前位置: 首页 > 知识库问答 >
问题:

java.lang.JavaSwing代码中的NullPointerExcema

艾宏远
2023-03-14

有人能告诉我为什么下面的代码抛出空指针异常吗?异常抛出在行号JTextField.addMouseListener(新的MyMouseAdapter(NumberJTextField));在类InputJFrame1.java.

import java.awt.*;

public class InputJFrame1 extends javax.swing.JFrame
{
    private javax.swing.JTextField numberJTextField;

    public InputJFrame1()
    {     
         numberJTextField.addMouseListener(new MyMouseAdapter(numberJTextField));
    }

    private void initComponents() 
    {
        numberJTextField = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        getContentPane().add(numberJTextField);
    }

    public static void main(String args[])
    {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(InputJFrame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(InputJFrame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(InputJFrame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(InputJFrame1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable()
                                    {
                                        @Override
                                        public void run()
                                        {
                                            new InputJFrame1().setVisible(true);
                                        }
                                    });
    }
}



import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JTextField;

public class MyMouseAdapter extends MouseAdapter
{
    private JTextField jTextField;

    MyMouseAdapter(JTextField jTextField)
    {
        this.jTextField=jTextField;
    }

    @Override
    public void mouseClicked(MouseEvent e)
    {
          jTextField.setForeground(Color.red);
    }
}

堆栈跟踪:

java线程“AWT-EventQueue-0”中出现异常。javaapplication8上的lang.NullPointerException。InputJFrame1。(InputJFrame1.java:9)位于javaapplication8。InputJFrame1$1。在java上运行(InputJFrame1.java:73)。awt。事件调用事件。java上的调度(InvocationEvent.java:251)。awt。事件队列。java上的dispatchEventImpl(EventQueue.java:727)。awt。事件队列。在java上访问$200(EventQueue.java:103)。awt。事件队列3美元。在java上运行(EventQueue.java:688)。awt。事件队列3美元。在java上运行(EventQueue.java:686)。安全访问控制器。java上的doPrivileged(本机方法)。安全ProtectionDomain$1。java上的doIntersectionPrivilege(ProtectionDomain.java:76)。awt。事件队列。java上的dispatchEvent(EventQueue.java:697)。awt。EventDispatchThread。java上的pumpOneEventForFilters(EventDispatchThread.java:242)。awt。EventDispatchThread。java上的pumpEventsForFilter(EventDispatchThread.java:161)。awt。EventDispatchThread。java上的pumpEventsForHierarchy(EventDispatchThread.java:150)。awt。EventDispatchThread。java上的pumpEvents(EventDispatchThread.java:146)。awt。EventDispatchThread。java上的pumpEvents(EventDispatchThread.java:138)。awt。EventDispatchThread。运行(EventDispatchThread.java:91)

共有3个答案

汪丁雷
2023-03-14

调用构造函数时,尚未分配字段numberJTextField。在添加MouseListener之前,尝试在构造函数中调用initComponents方法。

public class InputJFrame1 extends javax.swing.JFrame
{
    private javax.swing.JTextField numberJTextField;

    public InputJFrame1()
    {     
         initComponents(); //Init components before using textfield
         numberJTextField.addMouseListener(new MyMouseAdapter(numberJTextField));
    }

    private void initComponents() 
    {
        numberJTextField = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        getContentPane().add(numberJTextField);
    }
汪栋
2023-03-14

我想您忘了在默认构造函数上初始化numberJTextField(和其他组件)

public InputJFrame1()
    {     
         initComponents();
         numberJTextField.addMouseListener(new MyMouseAdapter(numberJTextField));
    }
钱飞翼
2023-03-14

不要从构造函数中删除initComponents。它确保所有组件在使用它们之前都被正确初始化,所以它应该是构造函数的第一行。

public InputJFrame1()
{     
     initComponents();
     numberJTextField.addMouseListener(new MyMouseAdapter(numberJTextField));
}
 类似资料:
  • 我有一些旧代码,我试图在VisualStudio代码中编辑。它混合了HTML和C#EG: 它有点像Razor,但不一样。我已经尝试了许多格式C#、Razor、超文本标记语言等。所有这些都以这样或那样的方式破坏代码。 如果我在Visual Studio(2019)中格式化它,那就太好了。有没有办法在Visual Studio Code中使用Visual Studio的格式化程序? 我知道简单的答案是

  • 我试图得到一些代码语法高亮我写的一些文档,我使用HAML和Highlight.js这将适用于像这样的单行Ruby代码(虽然高亮不是很好): 但是如果我尝试在< code>pre和< code>code标记中编写一些CSS,就像这样: 我得到“非法嵌套:纯文本嵌套是非法的。”错误,由于CSS末尾的括号。 有人知道使用HAML在网页上编写代码示例(主要是SASS、Ruby、HAML、Coffeescr

  • 有人能告诉我5美元是什么意思吗?这个例外究竟说明了什么?

  • 我正在编写一个 Java EE 应用程序,使用 Jetty 作为应用程序服务器,以便在开发过程中使用。虽然(重新)部署速度很快,但我希望Java代码更改能够立即反映在正在运行的服务器中,而无需重新启动。(我已经在使用设置来查看对静态服务内容的即时更改)。 我看到过关于使用Maven Jetty插件和设置scanInterval来重新部署web上下文的问题,但这不是我想做的。我的Jetty服务器是从

  • 我们目前在Java8中编译了代码,但我们在Java11 VM上运行它。现在我们也在尝试将代码移动到Java11编译时。想知道在Java8中编译代码与在Java11中编译代码在性能方面是否有任何好处,因为两个编译器都会生成不同的类文件(字节码)?在效率方面,一个与另一个有何不同?

  • 问题内容: 所有! 我在LinkedBlockingQueue中发现了奇怪的代码: 谁能解释为什么我们需要局部变量h?它对GC有什么帮助? 问题答案: 为了更好地了解发生了什么,让我们看看执行代码后列表的样子。首先考虑一个初始列表: 然后指向和指向: 然后指向和指向: 现在,实际上我们知道只有一个指向第一个元素的活动引用,它本身就是(),并且我们还知道GC收集的对象不再具有活动引用,所以当方法结束