Threads et connection
OmEn
-
OmEn -
OmEn -
Voilà mon problême : je voudrais créer un prog' en java qui lance un thread qui se connecte à un hôte puis l'endormir et le réactiver quand l'utilisateur veut envoier une demande, recevoire la réponse puis se réendormir et ainsi de suite. Voici mon prog', il est un peu long mais bon... :
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TrivialApplication
{
public static void main(String[] args)
{
OmenFrame frame = new OmenFrame();
frame.show();
}
}
public class OmenFrame extends Frame implements ActionListener
{
TextField address;
Button connect;
TextArea message;
TextArea response;
public OmenFrame()
{
setTitle("The Omen Connecter");
setSize(300, 400);
setLocation(50, 50);
setResizable(false);
setLayout(new FlowLayout());
s = new OmenThread("127.0.0.1", 21);
address = new TextField("", 32);
connect = new Button("Envoier");
message = new TextArea(8, 40);
response = new TextArea(16, 40);
add(address);
add(connect);
add(message);
add(response);
setBackground(Color.gray);
setForeground(Color.black);
address.setBackground(Color.white);
connect.setBackground(Color.white);
message.setBackground(Color.white);
response.setBackground(Color.white);
repaint();
Font font = new Font("Monaco", Font.PLAIN, 10);
address.setFont(font);
connect.setFont(font);
message.setFont(font);
response.setFont(font);
response.setEditable(false);
connect.addActionListener(this);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
if(!s.getParam().equals(address.getText())) s = new OmenThread(address.getText().substring(0, address.getText().indexOf(":")), toNumbers(address.getText().substring(address.getText().indexOf(":") + 1, address.getText().length())));
else
{
s.WakeUp();
response.append(s.Write(message.getText()));
response.append(s.Read());
s.Sleep();
}
}
OmenThread s;
public int toNumbers(String line)
{
int num = 0;
boolean more = true;
int i = 1;
while(i < 65535)
{
if(line.equals("" + i + ""))
{
num = i;
break;
}
else i++;
}
return num;
}
}
public class OmenThread extends Thread
{
String host;
int port;
Socket s;
boolean sleepy;
public OmenThread(String ihost, int iport)
{
host = ihost;
port = iport;
}
public void run()
{
try
{
s = new Socket(host, port);
sleepy = true;
while(true) Sleeping();
}
catch(IOException i)
{
}
catch(InterruptedException i)
{
}
}
public String Read()
{
String response = "";
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
while((line = in.readLine()) != null)
{
response += "" + line + "\r";
}
}
catch(IOException i)
{
}
return response;
}
public String Write(String message)
{
String response = "";
System.out.println(message);
try
{
BufferedReader text = new BufferedReader(new StringReader(message));
PrintWriter out = new PrintWriter(s.getOutputStream());
String mes;
while((mes = text.readLine()) != null)
{
out.println(mes);
out.flush();
response += "" + mes + "\r";
}
}
catch(IOException i)
{
}
return response;
}
public synchronized void Sleeping() throws InterruptedException
{
while(sleepy) s.wait();
}
public void Sleep()
{
sleepy = true;
}
public synchronized void WakeUp()
{
sleepy = false;
s.notify();
}
public String getParam()
{
return host + ":" + port;
}
}
Vous seriez vraiment sympa de m'expliquer pourquoi cela ne marche pas.
OmEn [i2n]
PS: j'ajouterait que je l'ai fait de mes mains donc merci de ne pas le réutiliser.
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class TrivialApplication
{
public static void main(String[] args)
{
OmenFrame frame = new OmenFrame();
frame.show();
}
}
public class OmenFrame extends Frame implements ActionListener
{
TextField address;
Button connect;
TextArea message;
TextArea response;
public OmenFrame()
{
setTitle("The Omen Connecter");
setSize(300, 400);
setLocation(50, 50);
setResizable(false);
setLayout(new FlowLayout());
s = new OmenThread("127.0.0.1", 21);
address = new TextField("", 32);
connect = new Button("Envoier");
message = new TextArea(8, 40);
response = new TextArea(16, 40);
add(address);
add(connect);
add(message);
add(response);
setBackground(Color.gray);
setForeground(Color.black);
address.setBackground(Color.white);
connect.setBackground(Color.white);
message.setBackground(Color.white);
response.setBackground(Color.white);
repaint();
Font font = new Font("Monaco", Font.PLAIN, 10);
address.setFont(font);
connect.setFont(font);
message.setFont(font);
response.setFont(font);
response.setEditable(false);
connect.addActionListener(this);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
if(!s.getParam().equals(address.getText())) s = new OmenThread(address.getText().substring(0, address.getText().indexOf(":")), toNumbers(address.getText().substring(address.getText().indexOf(":") + 1, address.getText().length())));
else
{
s.WakeUp();
response.append(s.Write(message.getText()));
response.append(s.Read());
s.Sleep();
}
}
OmenThread s;
public int toNumbers(String line)
{
int num = 0;
boolean more = true;
int i = 1;
while(i < 65535)
{
if(line.equals("" + i + ""))
{
num = i;
break;
}
else i++;
}
return num;
}
}
public class OmenThread extends Thread
{
String host;
int port;
Socket s;
boolean sleepy;
public OmenThread(String ihost, int iport)
{
host = ihost;
port = iport;
}
public void run()
{
try
{
s = new Socket(host, port);
sleepy = true;
while(true) Sleeping();
}
catch(IOException i)
{
}
catch(InterruptedException i)
{
}
}
public String Read()
{
String response = "";
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
String line;
while((line = in.readLine()) != null)
{
response += "" + line + "\r";
}
}
catch(IOException i)
{
}
return response;
}
public String Write(String message)
{
String response = "";
System.out.println(message);
try
{
BufferedReader text = new BufferedReader(new StringReader(message));
PrintWriter out = new PrintWriter(s.getOutputStream());
String mes;
while((mes = text.readLine()) != null)
{
out.println(mes);
out.flush();
response += "" + mes + "\r";
}
}
catch(IOException i)
{
}
return response;
}
public synchronized void Sleeping() throws InterruptedException
{
while(sleepy) s.wait();
}
public void Sleep()
{
sleepy = true;
}
public synchronized void WakeUp()
{
sleepy = false;
s.notify();
}
public String getParam()
{
return host + ":" + port;
}
}
Vous seriez vraiment sympa de m'expliquer pourquoi cela ne marche pas.
OmEn [i2n]
PS: j'ajouterait que je l'ai fait de mes mains donc merci de ne pas le réutiliser.
A voir également:
- Threads et connection
- Gmail connection - Guide
- Connection chromecast - Guide
- Facebook connection - Guide
- Code de connection internet gratuit pdf ✓ - Forum Réseau
- Comment avoir internet gratuit et illimitées en 3G/4G ✓ - Forum Sony
14 réponses
Pour commencer si ca marche pas je vois pas pourquoi on copierais hein...
Ensuite comme tu dis c'est un peu long alors si tu disais un peu ce que ca veux dire "ca marche pas"...
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
Ensuite comme tu dis c'est un peu long alors si tu disais un peu ce que ca veux dire "ca marche pas"...
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
De copier le prog' une fois les modifications faites. Et ca me renvoie une NullPointerException.
OmEn
OmEn
Plus précisement :
Exception occurred during event dispatching:
java.lang.NullPointerException
at OmenThread.WakeUp(TrivialApplication.java:170)
at OmenFrame.actionPerformed(TrivialApplication.java:71)
at java.awt.Button.processActionEvent(Button.java)
at java.awt.Button.processEvent(Button.java)
at java.awt.Component.dispatchEventImpl(Compiled Code)
at java.awt.Component.dispatchEvent(Compiled Code)
at java.awt.EventDispatchThread.run(EventDispatchThread.java)
Exception occurred during event dispatching:
java.lang.NullPointerException
at OmenThread.WakeUp(TrivialApplication.java:170)
at OmenFrame.actionPerformed(TrivialApplication.java:71)
at java.awt.Button.processActionEvent(Button.java)
at java.awt.Button.processEvent(Button.java)
at java.awt.Component.dispatchEventImpl(Compiled Code)
at java.awt.Component.dispatchEvent(Compiled Code)
at java.awt.EventDispatchThread.run(EventDispatchThread.java)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Est-ce que ca marcherait :
if(s) if(!s.getParam().equals(address.getText())) s = new OmenThread(address.getText().substring(0, address.getText().indexOf(":")), toNumbers(address.getText().substring(address.getText().indexOf(":") + 1, address.getText().length())));
Sinon comment savoir si l'objet existe ?
OmEn
if(s) if(!s.getParam().equals(address.getText())) s = new OmenThread(address.getText().substring(0, address.getText().indexOf(":")), toNumbers(address.getText().substring(address.getText().indexOf(":") + 1, address.getText().length())));
Sinon comment savoir si l'objet existe ?
OmEn
Oui, pour tester si l'object existe tu peux faire comme ca...
Si il est initialiser au debut c'est peut-etre pas l'erreur...
Mais bon ca contribue de toute facons...
Pourquoi tu veux re-creer une object s si il est initialiser au debut?
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
Si il est initialiser au debut c'est peut-etre pas l'erreur...
Mais bon ca contribue de toute facons...
Pourquoi tu veux re-creer une object s si il est initialiser au debut?
Je suis un gaucher contrariant. C'est plus fort que moi,
il faut que j'emmerde les droitiers.
T'inquiètes, il reviendra mais n'oublies pas qu'on est presque tous
bénévoles ici et qu'un peu de patience ne fait pas de mal.
Le gaucher c'est un étudiant en Grèce, alors tu vois ...
S'il ne se manifeste pas dans un ou deux jours, demandes le au
café d'à côté.
Mais pas 12 annonces, les modos (et les fidèles) n'aiment pas ça !
Je drague pas, je marivaude ...
bénévoles ici et qu'un peu de patience ne fait pas de mal.
Le gaucher c'est un étudiant en Grèce, alors tu vois ...
S'il ne se manifeste pas dans un ou deux jours, demandes le au
café d'à côté.
Mais pas 12 annonces, les modos (et les fidèles) n'aiment pas ça !
Je drague pas, je marivaude ...
Il a raison, je suis de retour...
Bon pour ton s.notify().... j'ai du mal j'avoue a suivre exactement toute ta logique, mais normallement ds mes souvenir (pas bien vieux mais quand meme) le notify ne devrait pas etre fait par la classe que ca doit reveiller...
Et si tu l'enleve tout betement ca donne quoi?
Bon pour ton s.notify().... j'ai du mal j'avoue a suivre exactement toute ta logique, mais normallement ds mes souvenir (pas bien vieux mais quand meme) le notify ne devrait pas etre fait par la classe que ca doit reveiller...
Et si tu l'enleve tout betement ca donne quoi?
Merci beaucoup, ca marche mieux mais maintenant ca me renvoie une NullPointerException dans la méthode Write(). Au moins l'autre problême est passé et j'ai corrigé la ligne :
if((s == null) || (!s.getParam().equals(address.getText()))) s = new OmenThread(address.getText().substring(0, address.getText().indexOf(":")), toNumbers(address.getText().substring(address.getText().indexOf(":") + 1, address.getText().length())));
Pour avoir plus de chance.
@+
OmEn [i2n]
www.i-2n.net
if((s == null) || (!s.getParam().equals(address.getText()))) s = new OmenThread(address.getText().substring(0, address.getText().indexOf(":")), toNumbers(address.getText().substring(address.getText().indexOf(":") + 1, address.getText().length())));
Pour avoir plus de chance.
@+
OmEn [i2n]
www.i-2n.net