Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[J2ME] Arreter un StreamConnectionNotifier.acceptAndOpen()

4 réponses
Avatar
JScoobyCed
Bonjour,

J'utilise un StreamConnectionNotifier pour ouvrir une connection
serie (cote serveur).
Tous se passe bien pour ouvrir et attendre un client. Mon probleme est
au cas ou je souhaite interrompre le acceptAndOpen()
<code>
1: StreamConnectionNotifier notifier = null;
2: StreamConnection sconn = null;
3: // Connection RFCOMM (serie sur BlueTooth)
4: String url = "btspp://localhost:"+uuid;
5: try {
6: // Cree le StreamConnectionNotifier
7: notifier = (StreamConnectionNotifier)Connector.open(url);
8: // Attend un client pour creer une connection
9: sconn = notifier.acceptAndOpen();
10: } catch(Exception exc) { //... }
</code>

Ce que je cherche c'est de debloquer le code a la ligne 9 au cas ou
l'utilisateur appuie sur 'Annuler'. Ce code fonctionne sur un telephone
mobile munie de MIDP2 CLDC1 avec l'API BlueTooth. Si je fais appel a
notifier.close(), l'application se bloque et je dois l'eteindre et le
rallumer. Idem si je fais:
notifier = null;
(oui, c'est un peu sauvage...)

Toute info bienvenue.

--
JScoobyCed
What about a JScooby snack Shaggy ? ... Shaggy ?!

4 réponses

Avatar
DNass
Bonjour,


Question est ce que tu lances les flux de connection a partir " du thread
principal "
si oui essaye de les lancer a partir d'un autre thread.
sa donne un truc du style
thread de l'appli qui lance un thread pour les connections
et un autre thread qui fait la fermeture et le nettoyage.

j'espere que cela va aider :)



"JScoobyCed" a écrit dans le message de
news:412962a3$0$18614$
Bonjour,

J'utilise un StreamConnectionNotifier pour ouvrir une connection
serie (cote serveur).
Tous se passe bien pour ouvrir et attendre un client. Mon probleme est
au cas ou je souhaite interrompre le acceptAndOpen()
<code>
1: StreamConnectionNotifier notifier = null;
2: StreamConnection sconn = null;
3: // Connection RFCOMM (serie sur BlueTooth)
4: String url = "btspp://localhost:"+uuid;
5: try {
6: // Cree le StreamConnectionNotifier
7: notifier = (StreamConnectionNotifier)Connector.open(url);
8: // Attend un client pour creer une connection
9: sconn = notifier.acceptAndOpen();
10: } catch(Exception exc) { //... }
</code>

Ce que je cherche c'est de debloquer le code a la ligne 9 au cas ou
l'utilisateur appuie sur 'Annuler'. Ce code fonctionne sur un telephone
mobile munie de MIDP2 CLDC1 avec l'API BlueTooth. Si je fais appel a
notifier.close(), l'application se bloque et je dois l'eteindre et le
rallumer. Idem si je fais:
notifier = null;
(oui, c'est un peu sauvage...)

Toute info bienvenue.

--
JScoobyCed
What about a JScooby snack Shaggy ? ... Shaggy ?!


Avatar
JScoobyCed
DNass wrote:
Bonjour,


Question est ce que tu lances les flux de connection a partir " du thread
principal "
si oui essaye de les lancer a partir d'un autre thread.
sa donne un truc du style
thread de l'appli qui lance un thread pour les connections
et un autre thread qui fait la fermeture et le nettoyage.

j'espere que cela va aider :)



Ummm... Non, je le lance dans un Thread a part. C'est vrai que j'ai pas
cherche a interrompre ce Thread... Je vais essayer, mais j'ai peur de
tomber encore sur un blockage :) Qui ne risque rien n'a rien... Et le
risque est faible: juste redemarrer le telephone.
Merci

--
JScoobyCed
What about a JScooby snack Shaggy ? ... Shaggy ?!

Avatar
JScoobyCed
DNass wrote:
Bonjour,


Question est ce que tu lances les flux de connection a partir " du thread
principal "
si oui essaye de les lancer a partir d'un autre thread.
sa donne un truc du style
thread de l'appli qui lance un thread pour les connections
et un autre thread qui fait la fermeture et le nettoyage.

j'espere que cela va aider :)



Bonjour,

Je ne pouvais arreter le Thread qui contenait le bout de code. J'ai
donc bouge l'appel a la methode acceptAndOpen dans un Runnable:
<code>
private void acceptAndConnect() {
Runnable runner = new Runnable() {
public void run() {
try {
sconn = notifier.acceptAndOpen();
} catch(Exception exc) {}
if(sconn != null) {
doServer();
}
}
};
Thread thd = new Thread(runner);
thd.start();
}
</code>

Et bizarrement, l'appel a notifier.close() ne "crash" pas mon appli et
je sors proprement du menu 'Server' pour retourner au menu principale.
Merci du conseil.

--
JScoobyCed
What about a JScooby snack Shaggy ? ... Shaggy ?!

Avatar
DNass
a po de koi ;)

"JScoobyCed" a écrit dans le message de
news:412aba5c$0$13684$
DNass wrote:
Bonjour,


Question est ce que tu lances les flux de connection a partir " du
thread


principal "
si oui essaye de les lancer a partir d'un autre thread.
sa donne un truc du style
thread de l'appli qui lance un thread pour les connections
et un autre thread qui fait la fermeture et le nettoyage.

j'espere que cela va aider :)



Bonjour,

Je ne pouvais arreter le Thread qui contenait le bout de code. J'ai
donc bouge l'appel a la methode acceptAndOpen dans un Runnable:
<code>
private void acceptAndConnect() {
Runnable runner = new Runnable() {
public void run() {
try {
sconn = notifier.acceptAndOpen();
} catch(Exception exc) {}
if(sconn != null) {
doServer();
}
}
};
Thread thd = new Thread(runner);
thd.start();
}
</code>

Et bizarrement, l'appel a notifier.close() ne "crash" pas mon appli et
je sors proprement du menu 'Server' pour retourner au menu principale.
Merci du conseil.

--
JScoobyCed
What about a JScooby snack Shaggy ? ... Shaggy ?!