【问题标题】:setVisible(true/false) error JFramesetVisible(true/false) 错误 JFrame
【发布时间】:2015-05-01 14:51:17
【问题描述】:

所以,我有一个问题。我知道问题是什么,但我不知道如何解决它。我给你代码。

public void initialize2(){

    txtWaaropGokken = new JTextField();
    txtWaaropGokken.setFont(new Font("Tahoma", Font.BOLD, 13));
    txtWaaropGokken.setHorizontalAlignment(SwingConstants.CENTER);
    txtWaaropGokken.setText("Waar wil je op gokken?");
    txtWaaropGokken.setBounds(10, 11, 414, 32);
    frame.getContentPane().add(txtWaaropGokken);
    txtWaaropGokken.setColumns(10);
    txtWaaropGokken.setEditable(false);

    JButton ChansesSimples = new JButton("Chanses Simples");
    ChansesSimples.setBounds(50, 65, 155, 32);
    frame.getContentPane().add(ChansesSimples);
    ChansesSimples.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {



            Random getal = new Random();
            int nummer;

            nummer=getal.nextInt(37); 

            txtHetBalletjeRolt = new JTextField();
            txtHetBalletjeRolt.setFont(new Font("Tahoma", Font.BOLD, 13));
            txtHetBalletjeRolt.setHorizontalAlignment(SwingConstants.CENTER);
            txtHetBalletjeRolt.setText("Het balletje is nu aan het rollen.");
            txtHetBalletjeRolt.setBounds(10, 11, 414, 32);
            frame.getContentPane().add(txtHetBalletjeRolt);
            txtHetBalletjeRolt.setColumns(10);
            txtHetBalletjeRolt.setEditable(false);

            ChansesSimples.setVisible(false); 
            Douzaines.setVisible(false);   \\HERE I DO GET THE ERROR
            Colonne.setVisible(false);   \\HERE I DO GET THE ERROR
            TransversaleSimple.setVisible(false); \\HERE I DO GET THE ERROR
            Carre.setVisible(false);    \\HERE I DO GET THE ERROR
            TransversalePlein.setVisible(false); \\HERE I DO GET THE ERROR
            Cheval.setVisible(false);   \\HERE I DO GET THE ERROR
            Plein.setVisible(false);   \\HERE I DO GET THE ERROR
            Cheval.setVisible(false);   \\HERE I DO GET THE ERROR






            if(nummer == 1 || nummer == 3 || nummer == 5 || nummer == 7 || nummer == 9 || nummer == 12 || nummer == 14 || nummer == 16 || nummer == 18 || nummer == 19 || nummer == 21 || nummer == 23 || nummer == 25 || nummer == 27 || nummer == 30 || nummer == 32 || nummer == 34 || nummer == 36){    

                txtRoodGewonnen = new JTextField();
                txtRoodGewonnen.setFont(new Font("Tahoma", Font.BOLD, 13));
                txtRoodGewonnen.setHorizontalAlignment(SwingConstants.CENTER);
                txtRoodGewonnen.setText("Gefeliciteerd! " + nummer + " is een rood nummer. Je hebt gewonnen!");
                txtRoodGewonnen.setBounds(10, 11, 414, 32);
                frame.getContentPane().add(txtRoodGewonnen);
                txtRoodGewonnen.setColumns(10);
                txtRoodGewonnen.setEditable(false);

                bedrag = bedrag + inzet * 1;

            }
            else{

                txtRoodVerloren = new JTextField();
                txtRoodVerloren.setFont(new Font("Tahoma", Font.BOLD, 13));
                txtRoodVerloren.setHorizontalAlignment(SwingConstants.CENTER);
                txtRoodVerloren.setText(nummer + " is geen rood nummer. Je hebt verloren.");
                txtRoodVerloren.setBounds(10, 11, 414, 32);
                frame.getContentPane().add(txtRoodVerloren);
                txtRoodVerloren.setColumns(10);
                txtRoodVerloren.setEditable(false);

                bedrag = bedrag - inzet;


            }
            txtBedrag = new JTextField();
            txtBedrag.setFont(new Font("Tahoma", Font.BOLD, 13));
            txtBedrag.setHorizontalAlignment(SwingConstants.CENTER);
            txtBedrag.setText("Je hebt nu " + bedrag + " euro.");
            txtBedrag.setBounds(10, 50, 414, 32);
            frame.getContentPane().add(txtBedrag);
            txtBedrag.setColumns(10);
            txtBedrag.setEditable(false);           
        }
    });

    JButton Douzaines = new JButton("Douzaines");
    Douzaines.setBounds(50, 105, 155, 32);
    frame.getContentPane().add(Douzaines);
    Douzaines.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {


        }
    });

    JButton Colonne = new JButton("Colonne");
    Colonne.setBounds(50, 145, 155, 32);
    frame.getContentPane().add(Colonne);
    Colonne.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {


        }
    });

    JButton TransversaleSimple = new JButton("Transversale Simple");
    TransversaleSimple.setBounds(50, 185, 155, 32);
    frame.getContentPane().add(TransversaleSimple);
    TransversaleSimple.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {


        }
    });

    JButton Carre = new JButton("Carré");
    Carre.setBounds(240, 65, 155, 32);
    frame.getContentPane().add(Carre);
    Carre.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {


        }
    });

    JButton TransversalePlein = new JButton("Transversale Plein");
    TransversalePlein.setBounds(240, 105, 155, 32);
    frame.getContentPane().add(TransversalePlein);
    TransversalePlein.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {


        }
    });

    JButton Cheval = new JButton("Cheval");
    Cheval.setBounds(240, 145, 155, 32);
    frame.getContentPane().add(Cheval);
    Cheval.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {


        }
    });

    JButton Plein = new JButton("Plein");
    Plein.setBounds(240, 185, 155, 32);
    frame.getContentPane().add(Plein);
    Plein.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {

            ChansesSimples.setVisible(false);    \\HERE I DONT GET AN ERROR
            Douzaines.setVisible(false);      \\HERE I DONT GET AN ERROR
            Colonne.setVisible(false);     \\HERE I DONT GET AN ERROR
            TransversaleSimple.setVisible(false); \\HERE I DONT GET AN ERROR
            Carre.setVisible(false);     \\HERE I DONT GET AN ERROR
            TransversalePlein.setVisible(false); \\HERE I DONT GET AN ERROR
            Cheval.setVisible(false);     \\HERE I DONT GET AN ERROR
            Plein.setVisible(false);     \\HERE I DONT GET AN ERROR
            Cheval.setVisible(false);     \\HERE I DONT GET AN ERROR


        }
    });

}

问题是,如果程序已经“通过”JButton,如果我然后 setVisible(false)。有用。正如您在 Plein JButton 中看到的那样,我没有收到该代码的任何错误。但是在 Chanses Simples JButton 中,如果我不想出现任何错误,我只能让按钮本身消失。当然我希望玩家可以选择第一个按钮。有什么想法吗?

这是我得到的错误代码:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Frame1$3.actionPerformed(Frame1.java:182)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

【问题讨论】:

  • 你在启动 JFrame 吗?
  • 通过发布长代码,您限制了愿意帮助您的人数。考虑简化您的示例并发布SSCCE
  • 修复此类错误的方法很简单:您阅读堆栈跟踪,注意到异常是从 Frame1.java 的第 182 行抛出的 NullPointerException,因此请转到该行并问自己有什么可能在该行为空。使用调试器会有所帮助。然后,您要么修复代码以确保不为 null 的内容,因为它不应该是,要么通过添加 if 测试来修复代码,在访问其成员之一之前检查它是否为 null。我们不知道贴出的代码墙中的第 182 行是什么,所以我们不会费心猜测。
  • 是的,我正在启动 JFrame,你是对的,我将发布另一个问题以简化我的问题。

标签: java swing error-handling jframe


【解决方案1】:

在您分享的代码中,按钮Douzaines(以及其他相关按钮)在声明之前使用:

Douzaines.setVisible(false);   // HERE I DO GET THE ERROR

// [...]

JButton Douzaines = new JButton("Douzaines");

// [...]

Douzaines.setVisible(false);      // HERE I DONT GET AN ERROR

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2011-11-07
    • 2015-07-23
    相关资源
    最近更新 更多