Java程序错误“AWT-EventQueue-0”

时间:2013-11-25 20:40:20

标签: java

Main.java

 package com.eduardo.aio;

    import com.eduardo.aio.design.Window;

    public class Main {

        public static void main(String args[]) {
            new Window();
        }
    }

Window.java

    public class Window extends JFrame {
    private IMC imc = new IMC();

    public JLabel jlabel1;
    public JTextField peso;
    public JLabel jlabel2;
    public JTextField altura;
    public JButton calcular;
    public JLabel jlabel3;
    public JTextField resultado;
    public JButton reset;
    public JLabel jlabel4;
    public JTextField estado;
    public JComboBox menu;

    public Window() {
        getContentPane().setLayout(null);
        menu();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("All In One Functions Calculator v0.1");
        setSize(400, 330);
        setVisible(true);
        setResizable(false);
        setLocationRelativeTo(null);
    }

    public void menu(){
        clearwindow();
        String Menu[]={"","Indice de Massa Corporal"};
        menu = new JComboBox(Menu);
        menu.setLocation(100,115);
        menu.setSize(200,30);
        menu.setForeground( new Color(-16777216) );
        menu.setBackground( new Color(-1) );
        menu.setEditable(false );
        menu.setToolTipText("");
        getContentPane().add(menu);
        menu.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                int index = menu.getSelectedIndex();

                switch(index){
                    case 0:
                        break;
                    case 1:
                        clearwindow();
                        imc();
                        break;
                }
            }
        });
    }
    public void clearwindow() {
        getContentPane().removeAll();
        revalidate();
        repaint();
    }
    public void imc() {

        jlabel1 = new JLabel();
        jlabel1.setLocation(8, 17);
        jlabel1.setSize(40, 30);
        jlabel1.setText("Peso:");
        getContentPane().add(jlabel1);

        peso = new JTextField();
        peso.setLocation(47, 17);
        peso.setSize(100, 30);
        peso.setText("");
        peso.setColumns(10);
        getContentPane().add(peso);

        jlabel2 = new JLabel();
        jlabel2.setLocation(205, 17);
        jlabel2.setSize(40, 30);
        jlabel2.setText("Altura:");
        getContentPane().add(jlabel2);

        altura = new JTextField();
        altura.setLocation(250, 17);
        altura.setSize(100, 30);
        altura.setText("");
        altura.setColumns(10);
        getContentPane().add(altura);

        calcular = new JButton();
        calcular.setLocation(50, 230);
        calcular.setSize(100, 50);
        calcular.setText("Calcular");
        getContentPane().add(calcular);
        calcular.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                imc.Imc();
            }
        });

        reset = new JButton();
        reset.setLocation(250, 230);
        reset.setSize(100, 50);
        reset.setText("Reset");
        getContentPane().add(reset);
        reset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                imc.Reset();
            }
        });
        jlabel3 = new JLabel();
        jlabel3.setLocation(8, 100);
        jlabel3.setSize(75, 30);
        jlabel3.setText("Resultado:");
        getContentPane().add(jlabel3);

        resultado = new JTextField();
        resultado.setLocation(70, 100);
        resultado.setSize(100, 30);
        resultado.setText("");
        resultado.setColumns(10);
        getContentPane().add(resultado);
        resultado.setEditable(false);

        jlabel4 = new JLabel();
        jlabel4.setLocation(8, 150);
        jlabel4.setSize(75, 30);
        jlabel4.setText("Estado:");
        getContentPane().add(jlabel4);

        estado = new JTextField();
        estado.setLocation(70, 150);
        estado.setSize(100, 30);
        estado.setText("");
        estado.setColumns(10);
        getContentPane().add(estado);
        estado.setEditable(false);

    }
}

IMC.java

       public class IMC{
    private Window window;

    public void Imc() {
        String p = window.peso.getText();
        String h = window.altura.getText();

        double p1 = Double.parseDouble(p);
        double h1 = Double.parseDouble(h);

        double imc = 1.3 * p1/ (Math.pow(h1, 2.5));

        double arredondar = Math.round(imc * 10.0) / 10.0;

        String total = String.valueOf(arredondar);

        window.resultado.setText(total);

        if (imc < 18.5) {
            window.estado.setText("Magreza grave");
        } else if (imc <= 25) {
            window.estado.setText("Saudável");
        } else if (imc > 25) {
            window.estado.setText("Sobrepeso");
        }
    }
    public void Reset() {
        window.peso.setText("");
        window.altura.setText("");
        window.resultado.setText("");
        window.estado.setText("");
    }
}

当我点击计算按钮或重置按钮时,它会给我这个错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at com.eduardo.aio.functions.IMC.Imc(IMC.java:9)
at com.eduardo.aio.design.Window$2.actionPerformed(Window.java:102)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

这是因为我从actionlistener错误地调用了这个方法? 任何人都可以帮助我,我不知道如何解决这个问题。

感谢

1 个答案:

答案 0 :(得分:0)

声明你的 imc 就像这样..

private IMC imc = new IMC();

问题解决了......