Bonjour,
J ' essaie de modifier mon programme(Chat client/serveur) pour en faire une applet interne( avant je l ' utilisais en tant qu ' applet externe , c ' est a dire un fichier html qui demarrait mon interface graphique sans l incorporer au navigateur)pour l ' integrer dans mon navigateur internet. Je rencontre cependant un null pointer lorsque j essaie d envoyer la liste des connectés et j ' arrive pas a voir d ' ou il peut provenir.
Mon programme était conçu comme ceci avant( et ca fonctionnait niquel)
classe ServeurChat
classe ChatServeur(comprend les elements graphiques)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public class ServeurChat extends JApplet { public void init(){ FenetreServeur f; try { f = new FenetreServeur ("Chat"); while(true){ BufferedReader in; in=f.getIn(); f.recevoir(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
classe fenetre(qui etend JFrame car j en ai besoin pour ma classe Login qui utilise un JDialog)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public ChatServeur(FenetreServeur f, LoginServeur l)throws IOException{ super(); fene=f; log=l; Socket s; s = new Socket( ip,serveur.getPort() ); in = new BufferedReader( new InputStreamReader(s.getInputStream())); out = new PrintStream( s.getOutputStream()); this.setLayout(null); this.setSize(new Dimension(600, 400)); //p2.setLayout(null); imageM=new JLabel(new ImageIcon("../LOGO.jpg")); imageM.setBackground(Color.LIGHT_GRAY); saisie.setBounds(new Rectangle(17, 243, 382, 20)); envoyer=new JButton("Envoyer"); effacer=new JButton("Vider"); kick=new JButton("Kicker"); deconnexion= new JButton("Deconnexion"); li=new List(); affichage.setEditable(false); affichage.setBounds(new Rectangle(14, 10, 385, 220)); affichage.setBackground(Color.WHITE); li.setBounds(new Rectangle(414, 14, 154, 117)); envoyer.setBounds(new Rectangle(15, 290, 88, 30)); effacer.setBounds(new Rectangle(125, 290, 88, 30)); deconnexion.setBounds(new Rectangle(345, 290, 115, 30)); kick.setBounds(new Rectangle(235, 290, 88, 30)); imageM.setBounds(new Rectangle(415, 148, 156, 81)); EcouteurServeur ecenvoyer=new EcouteurServeur(2,f,l,this); EcouteurServeur ecenvoyerClav=new EcouteurServeur(8,f,l,this); EcouteurServeur ecefface=new EcouteurServeur(3,f,l,this); EcouteurServeur eckick=new EcouteurServeur(5,f,l,this); EcouteurServeur ecdeco=new EcouteurServeur(6,f,l,this); saisie.addKeyListener(ecenvoyerClav); effacer.addActionListener(ecefface); envoyer.addActionListener(ecenvoyer); kick.addActionListener(eckick); deconnexion.addActionListener(ecdeco); li.addActionListener(new EcouteurServeur(1,f,l,this)); this.add(affichage); this.add(li); this.add(imageM); this.add(envoyer); this.add(effacer); this.add(deconnexion); this.add(kick); this.add(saisie); //Submit.addKeyListener(ecenvoyer); }
En faisant de la sorte , ca fonctionne sans probleme,mais c est dans une applet externe..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class FenetreServeur extends JFrame{ private ChatServeur ch; private LoginServeur log; public FenetreServeur (String s)throws IOException{ super(s); ch = new ChatServeur(this,log); this.add(ch,BorderLayout.CENTER); this.setLocationRelativeTo(null); this.setSize(new Dimension(600, 400)); this.setLayout(null); this.setResizable(false); this.setVisible(true); //hote= new Hote(this); log=new LoginServeur(this); this.addWindowListener(new EcouteurServeur(7,this,log,ch)); this.setTitle(log.titrelogin()); }
Si j essaie dans une interne en modifiant ma classe Chat de la sorte
ca me met un null pointer dans ma classe login(comme si il ne reconnaissait plus mon instance de fenetre)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public class ChatServeur extends JApplet{ public ChatServeur() throws HeadlessException { super(); // TODO Auto-generated constructor stub } private TextField saisie=new TextField(25); private TextArea affichage=new TextArea(15,45);; private BufferedReader in; private PrintStream out; private FenetreServeur fene; private LoginServeur log; private JPanel panel = new JPanel(); private Serveur serveur=new Serveur(); private List li; private JLabel imageM; private JButton envoyer; private JButton effacer; private JButton kick; private JButton deconnexion; private String imagePath = "E:/Mes documents/workspace/Chat Serveur/ressources/background1.jpg"; //private java.awt.Container cp; private final static String ip = "localhost"; public ChatServeur(FenetreServeur f,LoginServeur l)throws IOException{ super(); fene=f; log=l; Socket s; try { s = new Socket(ip,serveur.getPort()); in = new BufferedReader( new InputStreamReader(s.getInputStream())); out = new PrintStream( s.getOutputStream()); } catch (UnknownHostException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { fene = new FenetreServeur (); while(true){ BufferedReader in; in=fene.getIn(); fene.recevoir(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void init(){ //p2.setLayout(null); log=new LoginServeur(fene); imageM=new JLabel(new ImageIcon("../ressources/LOGO.jpg")); imageM.setBackground(Color.LIGHT_GRAY); saisie.setBounds(new Rectangle(17, 243, 382, 20)); envoyer=new JButton("Envoyer"); effacer=new JButton("Vider"); kick=new JButton("Kicker"); deconnexion= new JButton("Deconnexion"); li=new List(); affichage.setEditable(false); affichage.setBounds(new Rectangle(14, 10, 385, 220)); affichage.setBackground(Color.WHITE); //affichage.setRows(10); li.setBounds(new Rectangle(414, 14, 154, 117)); envoyer.setBounds(new Rectangle(15, 290, 88, 30)); effacer.setBounds(new Rectangle(125, 290, 88, 30)); deconnexion.setBounds(new Rectangle(345, 290, 115, 30)); kick.setBounds(new Rectangle(235, 290, 88, 30)); imageM.setBounds(new Rectangle(415, 148, 156, 81)); EcouteurServeur ecenvoyer=new EcouteurServeur(2,fene,log,this); EcouteurServeur ecenvoyerClav=new EcouteurServeur(8,fene,log,this); EcouteurServeur ecefface=new EcouteurServeur(3,fene,log,this); EcouteurServeur eckick=new EcouteurServeur(5,fene,log,this); EcouteurServeur ecdeco=new EcouteurServeur(6,fene,log,this); saisie.addKeyListener(ecenvoyerClav); effacer.addActionListener(ecefface); envoyer.addActionListener(ecenvoyer); kick.addActionListener(eckick); deconnexion.addActionListener(ecdeco); li.addActionListener(new EcouteurServeur(1,fene,log,this)); this.add(affichage); this.add(li); this.add(imageM); this.add(envoyer); this.add(effacer); this.add(deconnexion); this.add(kick); this.add(saisie); this.setVisible(true); this.setLayout(null); this.setSize(new Dimension(600, 400)); //Submit.addKeyListener(ecenvoyer); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public LoginServeur (FenetreServeur fen){ super(fen , "Saisie du pseudo et du mot de passe", true); fene=fen; labLogin =new Label("Saisissez votre pseudo: "); labPass =new Label("Saisissez votre mot de passe"); saisieLogin=new TextField(20); saisiePass=new JPasswordField(14); panelLoginMdp.setLayout(new FlowLayout()); panelLoginMdp.add(labLogin); panelLoginMdp.add(saisieLogin); panelLoginMdp.add(labPass); panelLoginMdp.add(saisiePass); this.add(panelLoginMdp); Button valider; valider=new Button("valider"); Button quit; quit=new Button("quitter"); EcouteurServeur ecvalider; ecvalider=new EcouteurServeur(4,fen,this,null); valider.addActionListener(ecvalider); EcouteurServeur ecquit; ecquit=new EcouteurServeur(9,fen,this,null); quit.addActionListener(ecquit); Panel p1; p1=new Panel(new FlowLayout()); p1.add(valider); p1.add(quit); this.add(p1,BorderLayout.SOUTH); this.setLocationRelativeTo(null); this.setSize(dimension); this.setResizable(false); this.addWindowListener(new EcouteurServeur(7,fen,this,null)); this.setVisible(true); } public ResultSet comparerLogin() throws SQLException { String resultat= null; String resultatPass= null; String s; String url=null; String login = "admin"; String password = "admin"; try { InetAddress thisIp = InetAddress.getLocalHost(); String adresseIP=thisIp.getHostAddress(); System.out.println(adresseIP); url="jdbc:mysql://localhost/chatdb"; } catch(UnknownHostException e) { e.printStackTrace(); } try { Class.forName("com.mysql.jdbc.Driver"); cn = (Connection) DriverManager.getConnection(url, login, password); st = (Statement) cn.createStatement(); } catch (ClassNotFoundException e) { e.printStackTrace(); System.out.println("pb connexion"); } ResultSet resultatLogin=st.executeQuery("Select login,mdp from user where login = \""+ saisieLogin.getText() +"\"and mdp=\""+ new String(saisiePass.getPassword())+"\""); while(resultatLogin.next()){ resultat=resultatLogin.getString("login"); resultatPass=resultatLogin.getString("mdp"); System.out.println(resultat); System.out.println(resultatPass); } if(saisieLogin.getText().equals(resultat) && new String(saisiePass.getPassword()).equals(resultatPass)){ System.out.println("c bon"); JOptionPane.showMessageDialog(null,"Bienvenue "+saisieLogin.getText() , ""+saisieLogin.getText() , JOptionPane.INFORMATION_MESSAGE); this.setVisible(false); s=this.recuplogin(); System.out.println(s); fene.envoielogin(s);// null pointer ici } else { System.out.println("c pa bon"); loginPOK(); } return resultatLogin; }}
Je vous remercie beaucoup si vous consentez a m aider car c ' est la derniere etape avant que je valide mon projet( ca fait 2 j que je suis bloque dessus)
Merci de votre aide
Partager