NullPointerException с использованием WindowsBuilder и JFrame

Я пытаюсь выполнить упражнение, чтобы узнать, как использовать WindowsBuilder и JFrame, и когда я нажимаю на кнопку, чтобы выполнить вычисления, я получаю ошибку:

Исключение в потоке "AWT-EventQueue- 0 "java.lang.NullPointerException в графическом интерфейсе $ 2.actionPerformed (GUI.java:109) в javax.swing.AbstractButton.fireActionPerformed (неизвестный источник) в javax.swing.AbstractButton $ Handler.actionPerformed (неизвестный источник) в javax.swing. DefaultButtonModel.fireActionPerformed (Неизвестный источник) в javax.swing.DefaultButtonModel.setPressed (Неизвестный источник) в javax.swing.plaf.basic.BasicButtonListener.mouseReleased (Неизвестный источник) в java.awt.Component.processMownEventEouseEvent. swing.JComponent.processMouseEvent (неизвестный источник) в java.awt.Component.processEvent (неизвестный источник) в java.awt.Container.processEvent (неизвестный источник) в java.awt.Component.dispatchEventImpl (неизвестный источник) в java.awt. Container.dispatchEventImpl (неизвестный источник) на java.awt.Component.dispatchEvent (Un известный источник) в java.awt.LightweightDispatcher.retargetMouseEvent (неизвестный источник) в java.awt.LightweightDispatcher.processMouseEvent (неизвестный источник) в java.awt.LightweightDispatcher.dispatchEvent (неизвестный источник) в java.awt.Container.known ) в java.awt.Window.dispatchEventImpl (неизвестный источник) в java.awt.Component.dispatchEvent (неизвестный источник) в java.awt.EventQueue.dispatchEventImpl (неизвестный источник) в java.awt.EventQueue.access $ 500 (неизвестный источник) в java.awt.EventQueue $ 3.run (неизвестный источник) в java.awt.EventQueue $ 3.run (неизвестный источник) в java.security.AccessController.doPrivileged (собственный метод) в java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersePext (неизвестный) Источник) в java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (Неизвестный источник) в java.awt.EventQueue $ 4.run (Неизвестный источник) в java.awt.EventQueue $ 4.run (Неизвестный источник) в java.security.AccessPontvile.de (Родной метод) в java.security.Pr otectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege (неизвестный источник) в java.awt.EventQueue.dispatchEvent (неизвестный источник) в java.awt.EventDispatchThread.pumpOneEventForFilters (неизвестный источник) в java.awt. EventDispatchThread.pumpEventsForHierarchy (неизвестный источник) в java.awt.EventDispatchThread.pumpEvents (неизвестный источник) в java.awt.EventDispatchThread.pumpEvents (неизвестный источник) в java.awt.EventDispatun

[неизвестный источник]

Весь код:

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;

import java.awt.Font;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.awt.event.ActionEvent;
import javax.swing.border.TitledBorder;
import javax.swing.JRadioButton;
import javax.swing.JComboBox;
import javax.swing.UIManager;
import java.awt.Color;
import javax.swing.JCheckBox;


public class GUI extends JFrame {

    private JPanel contentPane;
    private JTextField txtNumeroOrigen;
    private JTextField txtNumeroDestino;
    private JTextField txtDuracion;
    private JTextField txtPrecio;
    private JCheckBox checkboxProvincial;
    private JCheckBox checkboxLocal;
    private JCheckBox checkboxFranja1;
    private JCheckBox checkboxFranja2;
    private JCheckBox checkboxFranja3;
    Centralita callcenter = new Centralita();

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    GUI frame = new GUI();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public GUI() {
        setResizable(false);
        setTitle("Call Center");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 190);
        contentPane = new JPanel();
        contentPane.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Calcular Llamadas", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0)));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblTipo = new JLabel("Tipo:");
        lblTipo.setFont(new Font("Tahoma", Font.BOLD, 11));
        lblTipo.setBounds(6, 30, 46, 14);
        contentPane.add(lblTipo);

        JLabel lblFraja = new JLabel("Fraja:");
        lblFraja.setFont(new Font("Tahoma", Font.BOLD, 11));
        lblFraja.setBounds(6, 107, 46, 14);
        contentPane.add(lblFraja);

        JLabel lblNmeroOrigen = new JLabel("N\u00FAmero Origen");
        lblNmeroOrigen.setBounds(128, 30, 108, 14);
        contentPane.add(lblNmeroOrigen);

        JLabel lblNmeroDestino = new JLabel("N\u00FAmero Destino");
        lblNmeroDestino.setBounds(128, 55, 108, 14);
        contentPane.add(lblNmeroDestino);

        JLabel lblDuracion = new JLabel("Duraci\u00F3n");
        lblDuracion.setBounds(128, 81, 108, 14);
        contentPane.add(lblDuracion);

        txtNumeroOrigen = new JTextField();
        txtNumeroOrigen.setBounds(246, 30, 130, 20);
        contentPane.add(txtNumeroOrigen);
        txtNumeroOrigen.setColumns(10);

        txtNumeroDestino = new JTextField();
        txtNumeroDestino.setBounds(246, 55, 130, 20);
        contentPane.add(txtNumeroDestino);
        txtNumeroDestino.setColumns(10);

        txtDuracion = new JTextField();
        txtDuracion.setBounds(246, 81, 130, 20);
        contentPane.add(txtDuracion);
        txtDuracion.setColumns(10);

        JButton btnCalcular = new JButton("Calcular");
        btnCalcular.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                // Si es Llamada Local
                if (checkboxLocal.isSelected())
                {
                    LlamadaLocal callLocal = new LlamadaLocal (txtNumeroOrigen.getText(), txtNumeroDestino.getText(), Integer.parseInt(txtDuracion.getText()));
                    callcenter.registrarLlamada(callLocal);
                    refrescarPrecio(callcenter.getTotalFacturado());
                }

                // Si es Llamada Provincial y Franja 1
                else if (checkboxProvincial.isSelected() && checkboxFranja1.isSelected())
                {
                    LlamadaProvincial callProvincial = new LlamadaProvincial (txtNumeroOrigen.getText(), txtNumeroDestino.getText(), Integer.parseInt(txtDuracion.getText()), 1);
                    callcenter.registrarLlamada(callProvincial);
                    refrescarPrecio(callcenter.getTotalFacturado());
                }

                // Si es Llamada Provincial y Franja 2
                else if (checkboxProvincial.isSelected() && checkboxFranja2.isSelected())
                {
                    LlamadaProvincial callProvincial = new LlamadaProvincial (txtNumeroOrigen.getText(), txtNumeroDestino.getText(), Integer.parseInt(txtDuracion.getText()), 2);
                    callcenter.registrarLlamada(callProvincial);
                    refrescarPrecio(callcenter.getTotalFacturado());
                }

                // Si es Llamada Provincial y Franja 3
                else if (checkboxProvincial.isSelected() && checkboxFranja3.isSelected())
                {
                    LlamadaProvincial callProvincial = new LlamadaProvincial (txtNumeroOrigen.getText(), txtNumeroDestino.getText(), Integer.parseInt(txtDuracion.getText()), 3);
                    callcenter.registrarLlamada(callProvincial);
                    refrescarPrecio(callcenter.getTotalFacturado());
                }

                // Si nada esta seleccionado
                else
                    JOptionPane.showMessageDialog(null, "Debe seleccionar el tipo de llamada y la franja.");
            }
        });

        btnCalcular.setBounds(147, 128, 89, 23);
        contentPane.add(btnCalcular);

        JButton btnLimpiar = new JButton("Limpiar");
        btnLimpiar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                txtNumeroOrigen.setText("");
                txtNumeroDestino.setText("");
                txtDuracion.setText("");
                txtPrecio.setText("");
                checkboxProvincial.setSelected(false);
                checkboxLocal.setSelected(false);
                checkboxFranja1.setSelected(false);
                checkboxFranja2.setSelected(false);
                checkboxFranja3.setSelected(false);
            }
        });
        btnLimpiar.setBounds(246, 128, 89, 23);
        contentPane.add(btnLimpiar);

        txtPrecio = new JTextField();
        txtPrecio.setForeground(Color.RED);
        txtPrecio.setEditable(false);
        txtPrecio.setBounds(345, 129, 86, 20);
        contentPane.add(txtPrecio);
        txtPrecio.setColumns(10);

        JLabel lblPrecio = new JLabel("Precio:");
        lblPrecio.setFont(new Font("Tahoma", Font.BOLD, 11));
        lblPrecio.setBounds(385, 107, 46, 14);
        contentPane.add(lblPrecio);

        JCheckBox checkboxProvincial = new JCheckBox("Provincial");
        checkboxProvincial.setBounds(6, 51, 97, 23);
        contentPane.add(checkboxProvincial);

        JCheckBox checkboxLocal = new JCheckBox("Local");
        checkboxLocal.setBounds(6, 77, 97, 23);
        contentPane.add(checkboxLocal);

        JCheckBox checkboxFranja1 = new JCheckBox("1");
        checkboxFranja1.setBounds(6, 128, 39, 23);
        contentPane.add(checkboxFranja1);

        JCheckBox checkboxFranja2 = new JCheckBox("2");
        checkboxFranja2.setBounds(47, 128, 39, 23);
        contentPane.add(checkboxFranja2);

        JCheckBox checkboxFranja3 = new JCheckBox("3");
        checkboxFranja3.setBounds(88, 128, 46, 23);
        contentPane.add(checkboxFranja3);
    }

    public void refrescarPrecio(double precio)
    {
        DecimalFormat df = (DecimalFormat)NumberFormat.getInstance();
        df.applyPattern("$ ###,###.##");

        String Precio = "";
        Precio = df.format(Precio);
        txtPrecio.setText(Precio);
    }
}

Фотография программы: introducir la descripción de la imagen aquí

К какому указателю относится ошибка? Я не понимаю, в чем проблема.

0
задан 10.11.2016, 22:57
2 ответа

Exception in thread "AWT-EventQueue-0" java.lang. NullPointerException at GUI$2.actionPerformed (GUI.java:109) at

Кажется, что ошибка приходит из этой линии:

if (checkboxLocal.isSelected()) // checkboxLocal es "null"

Проблема состоит в том, что ты удвоил определение переменных твоего контроля. Для некоторых между ними (включая checkboxLocal), у тебя есть локальная версия и глобальная другая. И те, которые инициализировались правильно, - помещения. Но те, в которых ты нуждаешься, - глобальные, которые никогда не инициализировались, которым ты получаешь ошибку.

В частности, эта часть твоего кода:

JCheckBox checkboxProvincial = new JCheckBox("Provincial"); // local
checkboxProvincial.setBounds(6, 51, 97, 23);
contentPane.add(checkboxProvincial);

JCheckBox checkboxLocal = new JCheckBox("Local"); // local
checkboxLocal.setBounds(6, 77, 97, 23);
contentPane.add(checkboxLocal);

JCheckBox checkboxFranja1 = new JCheckBox("1"); // local
checkboxFranja1.setBounds(6, 128, 39, 23);
contentPane.add(checkboxFranja1);

JCheckBox checkboxFranja2 = new JCheckBox("2"); // local
checkboxFranja2.setBounds(47, 128, 39, 23);
contentPane.add(checkboxFranja2);

JCheckBox checkboxFranja3 = new JCheckBox("3"); // local
checkboxFranja3.setBounds(88, 128, 46, 23);
contentPane.add(checkboxFranja3);

... он был бы должен меняться в (он замечает использование глобальных):

this.checkboxProvincial = new JCheckBox("Provincial"); // global
checkboxProvincial.setBounds(6, 51, 97, 23);
contentPane.add(checkboxProvincial);

this.checkboxLocal = new JCheckBox("Local"); // global
checkboxLocal.setBounds(6, 77, 97, 23);
contentPane.add(checkboxLocal);

this.checkboxFranja1 = new JCheckBox("1"); // global
checkboxFranja1.setBounds(6, 128, 39, 23);
contentPane.add(checkboxFranja1);

this.checkboxFranja2 = new JCheckBox("2"); // global
checkboxFranja2.setBounds(47, 128, 39, 23);
contentPane.add(checkboxFranja2);

this.checkboxFranja3 = new JCheckBox("3"); // global
checkboxFranja3.setBounds(88, 128, 46, 23);
contentPane.add(checkboxFranja3);

Возможно есть другие проблемы, но это начало.

0
ответ дан 24.11.2019, 12:39
  • 1
    Привет, большое спасибо я соединяю, проблема была решена. Я gustarí, то есть немного больше, из-за qué нужно помещать его " this."?. Qué это правильное, объявлять это наверху, как я это сделал, или оставлять очевидной внизу как я это tení в?. –  RRGT19 11.11.2016, 00:06

Твоя проблема состоит в том, что никогда ты не инициализировал переменную checkboxLocal или, по крайней мере, не vГ© в cГіdigo, который ты поместил нам, поэтому тебя отпускает NullPointerException, когда ты называешь в Ваш mГ©todo checkboxLocal.isSelected() в линии 109.

0
ответ дан 24.11.2019, 12:39