Exception in thread "AWT-EventQueue-0" java.lang.NullPointerExce

Fermé
Randalass Messages postés 3 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 2 janvier 2015 - 2 janv. 2015 à 16:44
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 2 janv. 2015 à 18:49
Bonjour tout le monde ,
Svp j'ai besoin d'aide, comme l'indique le titre,je veux implémenter l'algorithme de diffie-Hellman, mais j'ai une erreur compilation : java.lang.NullPointerException !!

public class Alice {

    public static void main(String[] args) throws Exception {
        
        JOptionPane.showMessageDialog(null, "Echange de clés de Diffie-Hellman");
        
        AliceTraitement fenetre = new AliceTraitement();
        fenetre.setLocationRelativeTo(null);
        fenetre.setVisible(true);
        System.out.println("...Alice est en cours d'execution...");
              int NombreDeFois = 0;
          ServerSocket listener = new ServerSocket(9898);
        try {
                while (true) {
                    new AliceTraitement(listener.accept(), NombreDeFois++).run();
                }
            } finally {
                listener.close();
            }
        
     

    }
 private static class AliceTraitement extends javax.swing.JFrame implements Runnable {

        private Socket socket;
        private int NombreDeFois;

        public AliceTraitement(Socket socket, int NombreDeFois) {
            this.socket = socket;
            this.NombreDeFois = NombreDeFois;
            jTextArea1.append("Nouveau connexion avec Bob pour la # " + NombreDeFois + " fois"
                    + " sur " + socket);
            jTextArea1.append("Etape n°1:\nAlice et Bob choisissent ensemble un grand nombre premier P "
                    + "et un entier 1 ? G ? P?1 .\nCet échange n'a pas besoin d'être sécurisé.\n\n");

        }

        private JPanel jPanel1;
        private JScrollPane jScrollPane1;
        public JTextArea jTextArea1;
        private JToggleButton jToggleButton1;
        String a, b, c, d;
        BigInteger p;           

        public AliceTraitement(){
            initComponents(); 
                     
        }

        private void initComponents() {
            
        
            jPanel1 = new JPanel();
            jToggleButton1 = new JToggleButton();
            jScrollPane1 = new JScrollPane();
            jTextArea1 = new JTextArea();
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
            this.setTitle("DeffieHellman");
            this.setLocationByPlatform(true);
            jToggleButton1.setText("Commencer");

            jToggleButton1.addChangeListener(new javax.swing.event.ChangeListener() {
                public void stateChanged(javax.swing.event.ChangeEvent evt) {
                    DHDemareEvent(evt);
                }
            });

            jToggleButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    DHDemare(evt);
                }
            });

            GroupLayout jPanel1Layout = new GroupLayout(jPanel1);
            jPanel1.setLayout(jPanel1Layout);
            jPanel1Layout.setHorizontalGroup(
                    jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                            .addContainerGap()
                            .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(jToggleButton1, GroupLayout.PREFERRED_SIZE, 110, GroupLayout.PREFERRED_SIZE)
                            .addContainerGap(217, Short.MAX_VALUE)));

            jPanel1Layout.setVerticalGroup(
                    jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                            .addContainerGap()
                            .addGroup(jPanel1Layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
                                    .addComponent(jToggleButton1))
                            .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));

            jTextArea1.setEditable(false);
            jTextArea1.setColumns(60);
            jTextArea1.setRows(20);
            jTextArea1.setBorder(BorderFactory.createTitledBorder(null,
                    "Console", javax.swing.border.TitledBorder.CENTER,
                    javax.swing.border.TitledBorder.ABOVE_TOP,
                    new java.awt.Font("Tahoma", 0, 11), java.awt.Color.PINK));

            jScrollPane1.setViewportView(jTextArea1);

            GroupLayout layout = new GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addGroup(GroupLayout.Alignment.TRAILING,
                            layout.createSequentialGroup()
                            .addContainerGap()
                            .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING)
                                    .addComponent(jScrollPane1)
                                    .addComponent(jPanel1, GroupLayout.DEFAULT_SIZE,
                                            GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                            .addContainerGap()));
            layout.setVerticalGroup(
                    layout.createParallelGroup(GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                            .addContainerGap()
                            .addComponent(jPanel1, GroupLayout.PREFERRED_SIZE,
                                    GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                            .addGap(18, 18, 18)
                            .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE,
                                    192, Short.MAX_VALUE)
                            .addContainerGap()));

            pack();
            
        }

        private void DHDemareEvent(javax.swing.event.ChangeEvent evt) {

            if (jToggleButton1.isSelected()) {
                jToggleButton1.setText("En marche");

            } else {
                jToggleButton1.setText("Arrêté");
            }
        }

        private void DHDemare(java.awt.event.ActionEvent evt) {

            if (jToggleButton1.getText().equals("En marche")) {
                //Thread t = new Thread(new AliceTraitement());
                run();

            } else {
                jTextArea1.append("Terminé");

            }
        }

        public void run() {
            try {
                String a;
                BigInteger p, x;

                jTextArea1.append("Etape n°1:\nAlice et Bob choisissent ensemble un grand nombre premier P "
                        + "et un entier 1 ? G ? P?1 .\nCet échange n'a pas besoin d'être sécurisé.\n\n");

                BufferedReader in = new BufferedReader(
                        new InputStreamReader(socket.getInputStream()));
                PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

                a = JOptionPane.showInputDialog("Entrez la valeur de P stp.. ");
                p = getNextPrime(a);
                jTextArea1.append("Votre nombre premier est " + p + ".\n\n");

                a = JOptionPane.showInputDialog("Maintenant, entrez un nombre entier G tq: 1 ? G ? P?1");
                BigInteger g = new BigInteger(a);

                jTextArea1.append("Obtenir la valeur secret de Alice...\n\n");
                a = JOptionPane.showInputDialog(" Alice: Entrez votre nombre secret stp \n");
                BigInteger A = new BigInteger(a);

                jTextArea1.append("Alice calcule sa clé publique (G^a)mod P\nle resultat de cette clause sera envoyé a Bob\n\n");

                BigInteger resultatA = g.modPow(A, p);
                out.println(p);
                out.println(g);
                out.println(resultatA);
                x = new BigInteger(in.readLine());
                jTextArea1.append("La clé publique de Alice est :" + resultatA);
                jTextArea1.append("Alice envoyé sa clé publique a Bob " + resultatA + ".\n\n");

                jTextArea1.append("Obtenir la valeur secret de Bob \n\n");
                BigInteger AliceCléPrivé = x.modPow(A, p);

                jTextArea1.append("Alice calcule sa clé privé (" + x + "^" + A + ") mod " + p + ".\n\n");
                JOptionPane.showMessageDialog(null, "la Clé secrete à partager avec Bob de Alice est " + AliceCléPrivé + ".");

                socket.close();
                jTextArea1.append("connexion terminé avec Bob pour la # " + NombreDeFois + " Fois.");

            } catch (IOException e) {
                jTextArea1.append("Erreur : " + e);
            }
        }

        public BigInteger getNextPrime(String ans) {

            BigInteger test = new BigInteger(ans);
            while (!test.isProbablePrime(99)) {
                test = test.add(BigInteger.ONE);
            }
            return test;
        }
    }
}

2 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
2 janv. 2015 à 17:17
Bonjour,

Lorsque tu as une exception, celle-ci est lié à la trace d'appel du programme, qui te permet de savoir exactement sur quelle ligne est l'erreur, et dans quel contexte.

Il ne faut donc pas faire de catch sur des exceptions sans imprimer cette trace, sinon tu perds toutes les informations utiles pour leur résolution.

catch (Exception e) {
    e.printStackTrace();
    // ...
}

Ensuite, indiques nous quelle ligne lève cette exception afin que l'on puisse t'aider.
1
Randalass Messages postés 3 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 2 janvier 2015
2 janv. 2015 à 18:20
Salut, Voici la trace:


Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at Alice$AliceTraitement.run(Alice.java:172)// c'est la ligne n°167
            new InputStreamReader(socket.getInputStream()));
           
	at Alice$AliceTraitement.DHDemare(Alice.java:155)//ligne n°  150
run();

	at Alice$AliceTraitement.access$100(Alice.java:35) //ligne n°25
private static class AliceTraitement extends javax.swing.JFrame implements Runnable {

	at Alice$AliceTraitement$2.actionPerformed(Alice.java:82)//ligne n° 74
DHDemare(evt);


	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.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:308)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6516)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
	at java.awt.Component.processEvent(Component.java:6281)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4872)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4698)
	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:4698)
	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)

0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
2 janv. 2015 à 18:49
Lorsque tu fais un new AliceTraitement() sans argument, la variable socket n'a pas de valeur, elle vaut donc null, tu ne peux donc utiliser aucune méthode dessus... c'est pour ça que ça plante sur ton socket.getInputStream()
0