Bonjour,
Je ne sais pas si je poste dans la bonne catégorie car mon programme utilise à la fois Processing et Pure Data.
Pour commencer, j'ai un petit problème avec la librairie oscP5. Je ne sais pas pourquoi le compilateur n'exécute pas la fonction
void oscEvent(OscMessage theOscMessage)
. Du coup, l'affectation
stringReceive = theOscMessage.addrPattern();
ne s'exécute pas, ce qui me donne droit à un beau
nullPointerException
à la ligne
if (stringReceive.contains(tabStock[j])){
.
Il y a un problème avec l'utilisation de la bibliothèque oscP5 mais je n'arrive pas à trouver l'erreur.
J'ai déjà posté une demande d'aide sur Stackoverflow, si vous voulez suivre un peu le déroulement de mon débogage http://stackoverflow.com/questions/3598 … rexception
Vous trouverez en PJ mon programme ainsi que des screenshots du programme Pure Data.
Merci d'avance !
Dernière modification par Clapoule (2016-03-15 21:12:07)
Hors ligne
Salut Clapoule et bienvenue,
Pour éviter la nullPointerException, tu peux initialiser stringReceive au moment tu déclares cette variable, au début de ton programme, avec
String stringReceive = "";
Je ne sais pas si ça résoudra tout mais c'est un début!
Hors ligne
Effectivement, ça me supprime ce fameux nullPointerException
et mon programme compile donc correctement.
Cependant, la fonction
void oscEvent(OscMessage theOscMessage)
ne s'exécute pas, le programme tourne donc avec la variable stringReceive
vide.
Dernière modification par Clapoule (2016-03-16 00:12:51)
Hors ligne
Si la fonction ne s'exécute pas, c'est que soit la connexion ne se fait pas entre pure data et processing, soit pure data n'envoie rien. Tu pourrais d'essayer un patch pure data le plus simple possible qui envoie une valeur à processing par OSC et utiliser le sketch d'exemple d'oscP5 (oscP5sendReceive) pour le recevoir, si ça marche la connexion se fait bien. Si ce n'est pas le cas, ça peut venir de ton système, un firewall par exemple ou le port est déjà utilisé pour autre chose
Hors ligne
Avec le port 12000 :
### [2016/3/18 11:52:40] PROCESS @ OscP5 stopped. ### [2016/3/18 11:52:40] PROCESS @ UdpClient.openSocket udp socket initialized. ### [2016/3/18 11:52:41] ERROR @ UdpServer.start() IOException, couldnt create new DatagramSocket @ port 12000 java.net.BindException: Address already in use: Cannot bind ### [2016/3/18 11:52:41] INFO @ OscP5 is running. you (169.254.60.109) are listening @ port 12000
Avec un autre port (12003 dans ce cas-là) :
### [2016/3/18 11:56:34] PROCESS @ OscP5 stopped. ### [2016/3/18 11:56:34] PROCESS @ UdpClient.openSocket udp socket initialized. ### [2016/3/18 11:56:35] PROCESS @ UdpServer.start() new Unicast DatagramSocket created @ port 12003 ### [2016/3/18 11:56:35] PROCESS @ UdpServer.run() UdpServer is running @ 12003 ### [2016/3/18 11:56:35] INFO @ OscP5 is running. you (169.254.60.109) are listening @ port 12003
Il y avait donc bien un problème de port. Cependant, cela ne m'affiche toujours pas les messages contenus dans la fonction oscEvent(), même avec l'antivirus et le pare-feu désactivés ainsi qu'avec le programme oscP5sendReceive.
Hors ligne
Hello
C'est tout à fait étrange, ça frôle l'erreur mystique, j'ai essayé avec un patch tout simple (voir ci-dessous), sans succès... puis j'ai réduit ton programme processing progressivement jusqu'à ce qu'il soit identique à oscP5sendReceive, et ça ne marchait pas! Alors j'ai repris oscP5SendReceive et j'ai ajouté les fonctinos propres à ton code et là ça marche ?!? Très très bizarre
Enfin, je mets le code qui fonctionne en pièce jointe, essaie le et dis moi ce qu'il en est!
Hors ligne