Salut,
Je me demande si deux modules (2 classes java) dans la même JVM peuvent communiquer via une interface java,
Merci d'avance,
Salut,
Je me demande si deux modules (2 classes java) dans la même JVM peuvent communiquer via une interface java,
Merci d'avance,
Bonjour,
Drôle de question.
Je ne suis pas professionnel, mais les interfaces servent uniquement à définir un jeu de méthode vide en vue de les implémenter dans différentes classes devant répondre à un besoin commun.
A l'issu, une classe qui implémente une interface s'approprie en quelque sorte la ou les méthodes décrites par cette dernières. Le développeur qui implémente une interface est en charge d'écrire le code a réaliser dans la méthode.
Par exemple, les composant Swing de Java peuvent tous avoir besoin d'être informés des évènements de souris. Pour cette raison, l'API standard Java met a disposition des développeurs un ensemble d'interfaces d'écoutes d'évènements dédiés à la souris. Lorsque ces évènements surviennent, la JVM dispatchera l'évènement auprès de toutes les classes qui implémente l'interface MouseListener et qui ont été enregistrées comme écouteur auprès d'un composant "émetteur".
Par contre, si ce sont deux programmes différents qui désirent communiquer ensemble, il faudra utiliser les sockets par exemples, ou bien des pipes.
Enfin voilà...
Les interfaces n'ont pas grand chose à voir avec la question. Un objet, dans la jvm, peux évidement appeler les méthodes d'un autre objet dans la même jvm, pour un peu qu'il aie une référence vers cet objet.
Salut, et Merci pour vos réponse,
en fait , je vais éclaircir un peu ma question ,
J'ai deux modules indépendant développés en java , et je veux qu'ils communiquent d'une manière indépendante , en effet , je veux que mon "string" récupéré par le premier module passe au deuxième module ,
j’espère que vous avez compris ma question,
Bien cordialement,
Pour ça, il doivent se connaitre (au moins dans un sens) et tu aura donc la classe instanceA du module A qui aura dans son code quelque part instanceBquonmafile.setValeurString(lanouvellevaleur).
Il n'y a pas de magie
Ok, mais qu'entendez-vous par module.
Ces modules, c'est vous qui les avez créés ?
Plus simplement, faisons abstraction du langage. Vous avez deux programmes qui fonctionnent indépendamment l'un de l'autre et vous aimeriez qu'ils échangent des informations entre eux sous forme de chaîne.
Dans ce cas, je crois comprendre pourquoi vous parlez d'interface. En fait, vous pensiez créer une interface commune a ces deux applications. Ce n'est pas erroné comme réflexion, mais comme le résume très bien tchize_ les interfaces n'ont rien à voir avec cela. Dans votre cas, il s'agirait plutôt d'un dialogue "externe", donc comme je vous l'expliquait, seul des outils de dialogue "externe" vous permettrons cela. Les Sockets ou les Pipe. Encore faudra-t-il écrire les méthode au sein de vos classes pour mettre en œuvre et exploiter ces objets.
J'espère avoir répondu à votre question. Quoi qu'il en soit, pour ma part, à moins que vous ayez du code à soumettre, je ne pourrai pas aller plus loin.
Bon courage...
Bonjour
Deux processus indépendants peuvent communiquer par sockets. (exécutés par la JVM ou non)
@tchize_
@pursang
@Flodelarab
Merci bien pour ces réponses ,
Bien cordialement ,
------
------
Re-Salut ,
J'ai un autre problème , Lorsque j'utilise la pipe dans la même classe le programme fonctionne correctement , mais dès que je connecte l'entrée déclarée dans la première classe au sortie déclarés dans le deuxième module , Je me trouve devant le trace suivant : "java.io.IOException: Pipe not connected" , et j'ai essayé d'utiliser la méthode "out.connect(maclasse.in)" ,
Mais en vain , la même erreur s'affiche encore.
Merci d'avance,
J'ai beaucoup de mal à vous suivre...
Vous parlez de classes, de programmes, de modules ?!....
Je n'arrive pas à comprendre si vous me parlez d'un seul programme, ou de deux programmes complètement différents ?
Normal. Un tube ne marche que s'il y a qqch en entrée et qqch en sortie.
Si tu es sous linux, médite ces choses-ci:
Le premier cat monopolise la console en attendant que l'autre côté du tube sois branché (ce qui n'arrivera pas). Obligé de faire Ctrl+c pour arrêter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $ mkfifo tube $ cat fichier.txt >tube ^C $ cat fichier. txt >tube & $ cat <tube $ rm -f tube
Le second cat ne fait rien à part mettre en arrière plan ce nouveau processus qui attend.
Lors du troisième cat, tout s'active, le deuxième et le troisième cat s'exécutent.
Par la suite, les deux processus s'arrêtent et le tube nommé est vide.
mkfifo et rm -f fifo fabriquent et détruisent le tube nommé
En fait, deux programmes différents (ou deux classes différentes si vous préférez) sont deux entités qui n'évoluent pas dans le même espace mémoire. Par définition, dans ce cas, le programme qui évolue dans l'espace mémoire A ne peut pas accéder aux donnée contenues dans l'espace mémoire B du second programme. Si ces deux programmes ont un point commun (un lanceur par exemple), ce dernier peut leur fournir le 'tuyau' ou 'tube' qui leur permettra de communiquer entre eux 'en interne'.
Si par contre ils n'ont aucuns point commun, ils sont lancés par leur propre classe main indépendamment l'un de l'autre, alors il ne reste plus que la solution 'externe'. Les Sockets par exemple comme l'a indiqué flodelarab. Avec une précision toutefois, si vos programmes évoluent sur la même machine, créez votre socket sur la boucle locale "127.0.0.1", cela évitera de polluer inutilement le réseau, ce qui arriverait si vous utilisiez votre socket en le connectant sur l'adresse IP xxx.xxx.xxx.xxx de votre machine.
Merci bien pour votre interaction,
@pursang :
2 Modules = 2 classes différentes
@All :
En fait , j'ai entendu parler de l'implémentation d'une interface , en effet , il faut créer une interface et les deux classes doivent l’implémentée , mais A ce que je sais , une interface est une classe abstraite où raison d’être = "Héritage Multiple" ,
merci
Du coup, un peu comme avec l'expression appeler un chat un chat :
Ce serait bien d'appeler deux classes deux classes. Logique.
Tu as sûrement fait une erreur. Par exemple tu essaies d'utiliser le pipe avant d'avoir connecté les deux bouts. Il faut montrer le code.Envoyé par Mednet
Moui enfin, le pseudo-héritage multiple n'est qu'un des intérêts des interfaces.
Et sinon... Ok, et alors ? Ça nous mène quelque part ?
Merci pour votre réponse ,
En fait , je vais essayé d’éclaircir un peu les choses ,
Oublions les pipes ,
Ma question est la suivante : Est-ce-que deux classes indépendantes peuvent communiquer en implémentant une interface ,
Public interface communication{
}
public class envoi{
}
public class recept{
}
NB : Communication unidirectionnelle (une classe envoie , l'autre reçoit)
Mettons A envoie vers B, tu crée une interface "Recipient" avec un méthode genre
B implémente cette interface:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public interface Recipient{ public void envoi(Truc truc); }
A doit connaitre le récipient
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class B implements Recipient{ public void envoi(Truc truc){ // faire quelque chose avec le truc reçu } }
Et enfin faut tout lier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public class A { private Recipient recipent; public void setRecipient(Recipient recipent){ this.recipient = recipient; } public void trucmuch(){ // ..... recipient.envoi(untruc); // ..... } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 A a = new A() B b = new B(); a.setRecipient(b); a.trucmuch();
Merci pour vos réponses ,
Finalement , j'ai arrivé à transmettre le fameux string ,
Alors , passons au deuxième stade :
Normalement , ma première classe est une classe qui hérite de la Classe Thread , donc je veux accéder a ce string pendant l'execution de ce thread,
en effet , ce thread c'est lui qui renvoie les string , J'ai essayé de travailler avec les classes internes mais le 2ème programme me renvoie une valeur NULL,
Any idea ?
Thanks
Finalement , j'ai arrivé à transmettre le fameux string ,Ces deux phrases se contredisent.mais le 2ème programme me renvoie une valeur NULL,
Qu'es-tu arrivé à faire exactement?
Attention au vocabulaire. Une classe n'est pas un objet.
Une classe est un type d'objet. Tu peux instancier des objets de cette classe. L'héritage concerne la description de la classe, pas la descriptions des objets. Pour qu'une classe ait une "string", il faut que la "string" soit définie static et alors elle est unique pour toute la classe (donc tous les objets qui en découlent)
Nop , y a pas de magie dans ce que je viens de dire ,
en effet , j'ai arrivé à transmettre le string de la classe A vers B , Mais ces deux classes sont des classes simples c'est à dire ne sont pas multi-threaded ,
Mais , lorsque je modifie la première classes ( extends thread) et je définie la méthode run() , la deuxième classe renvoie une valeur NULL ,
J'espère que vous avez compris
"Je suis arrivé" est la forme correcte.
Si tu la redéfinis, c'est elle qui prévaut. appelles super.run() si tu veux que celle de la classe mère s'exécute.je définie la méthode run()
Partager