Java - java.lang.NullPointerException

   
Vista:

java.lang.NullPointerException

Publicado por oscar (12 intervenciones) el 04/08/2016 02:21:23
Buenas necesitaba si me pueden ayudar con dos problemas en dos programitas diferentes , uno de un calculadora que expongo y tambien el fallo que da y otro ejemplo de eventos y su error que sucede al pulsar el boton nuevo.

me pueden ayudar a saber que carajo les pasa , revise el codigo y reescribi de nuevo y falla y falla .....

no encuentro el error.

me arrojan algo de luz???

gracias de antemano


calculadora


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package graficos;
 
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
 
public class Calculadora {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        MarcoCalculadora mimarco=new MarcoCalculadora();
        mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mimarco.setVisible(true);
    }
}
 
class MarcoCalculadora extends JFrame{
 
    public MarcoCalculadora(){
 
        setTitle("Calculadora");
 
        setBounds(600, 100, 300 , 400);
 
        LaminaCalculadora milamina=new LaminaCalculadora();
 
        add(milamina);
        }
    }
 
class LaminaCalculadora extends JPanel{
 
    public LaminaCalculadora(){
 
        principio=true;
 
        setLayout(new BorderLayout());
 
        JButton pantalla=new JButton("0");
 
        pantalla.setEnabled(false);
 
        add(pantalla,BorderLayout.NORTH);
 
        JPanel milamina2=new JPanel();
 
        milamina2.setLayout(new GridLayout(4, 4));
 
        ActionListener insertar=new InsertaNumero();
 
        ActionListener orden=new AccionOrden();
 
        ponerBoton("7",insertar);
        ponerBoton("8",insertar);
        ponerBoton("9",insertar);
        ponerBoton("/",orden);
        ponerBoton("4",insertar);
        ponerBoton("5",insertar);
        ponerBoton("6",insertar);
        ponerBoton("*",orden);
        ponerBoton("1",insertar);
        ponerBoton("2",insertar);
        ponerBoton("3",insertar);
        ponerBoton("-",orden);
        ponerBoton("0",insertar);
        ponerBoton(".",insertar);
        ponerBoton("=",insertar);
        ponerBoton("+",insertar);
 
        add(milamina2, BorderLayout.CENTER);
 
        ultimaOperacion="=";
    }
 
    private void ponerBoton(String rotulo, ActionListener oyente){
 
        JButton boton=new JButton(rotulo);
        boton.addActionListener(oyente);
        milamina2.add(boton);
    }
 
    private class InsertaNumero implements ActionListener{
 
        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
 
            String entrada=e.getActionCommand();
 
            if(principio==true){
 
                pantalla.setText("");
                principio=false;
            }
 
            pantalla.setText(pantalla.getText() + entrada);
        }
    }
 
    private class AccionOrden implements ActionListener{
 
        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
 
            String operacion=e.getActionCommand();
 
            calcular(Double.parseDouble(pantalla.getText()));
 
            ultimaOperacion=operacion;
 
            principio=true;
        }
 
        public void calcular(double x){
 
            if(ultimaOperacion.equals("+")){ resultado+=x;
            }
            else if(ultimaOperacion.equals("-")){ resultado-=x;
            }
            else if(ultimaOperacion.equals("*")){ resultado*=x;
            }
            else if(ultimaOperacion.equals("/")){ resultado/=x;
            }
            else if(ultimaOperacion.equals("=")){ resultado=x;
            }
            pantalla.setText("" + resultado);
        }
    }
 
    private JButton pantalla;
 
    private JPanel milamina2;
 
    private boolean principio;
 
    private double resultado;
 
    private String ultimaOperacion;
}


Exception in thread "main" java.lang.NullPointerException
at graficos.LaminaCalculadora.ponerBoton(Calculadora.java:82)
at graficos.LaminaCalculadora.<init>(Calculadora.java:56)
at graficos.MarcoCalculadora.<init>(Calculadora.java:28)
at graficos.Calculadora.main(Calculadora.java:14)






eventos


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package graficos;
 
import java.awt.event.*;
import javax.swing.*;
 
public class VariosOyentes{
 
    public static void main(String[] args){
        // TODO Auto-generated method stub
 
        Marco_Principal mimarco=new Marco_Principal();
 
        mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        mimarco.setVisible(true);
 
    }
}
 
class Marco_Principal extends JFrame{
 
    public Marco_Principal(){
 
        setTitle("Prueba Varios");
 
        setBounds(500,100,250,150);
 
        Lamina_Principal lamina=new Lamina_Principal();
 
        add(lamina);
 
    }
}
 
class Lamina_Principal extends JPanel{
 
    public Lamina_Principal(){
 
        JButton boton_nuevo=new JButton("Nuevo");
 
        add(boton_nuevo);
 
        JButton boton_cerrar=new JButton("Cerrar Todo");
 
        add(boton_cerrar);
 
        OyenteNuevo miOyente=new OyenteNuevo();
 
        boton_nuevo.addActionListener(miOyente);
 
    }
    private class OyenteNuevo implements ActionListener{
 
        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
 
            Marco_Emergente marco=new Marco_Emergente(boton_cerrar);
 
            marco.setVisible(true);
        }
 
    }
        JButton boton_cerrar;
    }
 
class Marco_Emergente extends JFrame{
 
    public Marco_Emergente(JButton boton_de_principal){
 
        contador++;
 
        setTitle("Ventana " + contador);
 
        setBounds(40*contador,40*contador,250,150);
 
        CierraTodos oyenteCerrar=new CierraTodos();
 
        boton_de_principal.addActionListener(oyenteCerrar);
    }
 
    private class CierraTodos implements ActionListener{
 
        @Override
        public void actionPerformed(ActionEvent e) {
            // TODO Auto-generated method stub
 
            dispose();
 
        }
 
    }
    private static int contador=0;
}



Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at graficos.Marco_Emergente.<init>(VariosOyentes.java:79)
at graficos.Lamina_Principal$OyenteNuevo.actionPerformed(VariosOyentes.java:58)
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$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.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$JavaSecurityAccessImpl.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)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

java.lang.NullPointerException

Publicado por ctmy (34 intervenciones) el 04/08/2016 05:46:27
La forma en que usas los metodos no parecen correctos. No programo mucho UI pero el problema es sobre inicializacion.

El error es debido a que no estas inicializando correctamente. Esta solucion es solo para mostrar el formulario(de la calculadora) con los botones pero tenes un problema parecido cuando haces click en los botones.

En este metodo cambia(solo los argumentos):
1
2
3
4
5
6
7
8
ponerBoton(String rotulo, ActionListener oyente)
 
//a esto
ponerBoton(JPanel panel, String rotulo, ActionListener oyente)
 
 
//y en estas lineas a esto
ponerBoton(milamina2, "7",insertar);
Suerte
http://ctmy-dev.appspot.com/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

java.lang.NullPointerException

Publicado por oscar (12 intervenciones) el 04/08/2016 11:29:37
BUENAS

Gracias por responder , otras veces lo he realizado igual y ha funcionado , de echo este ejemplo deriva de uno que funcionaba perfecto.

mira este


package graficos;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PruebaAcciones {

public static void main(String[] args) {

MarcoAccion mimarco=new MarcoAccion();
mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mimarco.setVisible(true);
}
}

class MarcoAccion extends JFrame{

public MarcoAccion(){

setTitle("Prueba Acciones");
setBounds(700,100,600,300);
PanelAccion lamina=new PanelAccion();
add(lamina);
}
}

class PanelAccion extends JPanel {

public PanelAccion (){
AccionColor accionAmarillo=new AccionColor("Amarillo", new ImageIcon("src/graficos/amarillo.gif"), Color.yellow);
AccionColor accionAzul=new AccionColor("Azul", new ImageIcon("src/graficos/azul.gif"), Color.blue);
AccionColor accionRojo=new AccionColor("Rojo", new ImageIcon("src/graficos/rojo.gif"), Color.red);
add(new JButton(accionAmarillo));
add(new JButton(accionAzul));
add(new JButton(accionRojo));

InputMap mapaEntrada=getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap mapaAccion=getActionMap();

mapaEntrada.put(KeyStroke.getKeyStroke("ctrl A"), "fondo_amarillo");
mapaAccion.put("fondo_amarillo", accionAmarillo);

mapaEntrada.put(KeyStroke.getKeyStroke("ctrl B"), "fondo_azul");
mapaAccion.put("fondo_azul", accionAzul);

mapaEntrada.put(KeyStroke.getKeyStroke("ctrl R"), "fondo_rojo");
mapaAccion.put("fondo_rojo", accionRojo);

}
private class AccionColor extends AbstractAction{
public AccionColor(String nombre, Icon icono , Color color_boton ){
putValue(Action.NAME, nombre);
putValue(Action.SMALL_ICON, icono);
putValue(Action.SHORT_DESCRIPTION, "Pone la lámina de color " + nombre);
putValue("color_de_fondo", color_boton);
}

public void actionPerformed(ActionEvent e) {
Color c=(Color)getValue("color_de_fondo");
setBackground(c);

System.out.println("Nombre : "+getValue(Action.NAME)+" Descripcion : "+getValue(Action.SHORT_DESCRIPTION));
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar