IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Application chat JMS


Sujet :

Java EE

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Application chat JMS
    Bonjour tt le monde,
    j'ai creer une application chat avec JMS sous eclipse, et pour ça j'ai utilisé OPENJMS(provider) où j'ai creer un utilisateur avec son mot de passe et un Topic, voila un extrait du MAIN:
    public static void main(String [] args){
    try{
    if (args.length!=3)
    System.out.println("Topic or username missing");

    // args[0]=topicName; args[1]=username; args[2]=password
    Chat chat = new Chat(args[0],args[1],args[2]);
    ...

    à l'execussion ça me donne le message suivant:

    Topic or username missing
    java.lang.ArrayIndexOutOfBoundsException: 0
    at chap2.chat.Chat.main(Chat.java:99)


    d'après ce que j'ai compris, je dois rentrer les arguments(topic,user,pass) mais je sais pas où??????
    je suis débuttante en programmation aidez moiiiiiiiiiii
    Merci d'avance

  2. #2
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Hello,
    tu tests si la taille de args est !=3 mais quoi qu'il arrive, tu exécutes le code qui suit.
    Commence par mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static void main(String [] args){
            try{
                if (args.length!=3)
                    System.out.println("Topic or username missing");
                else
                {
                    // args[0]=topicName; args[1]=username; args[2]=password
                    Chat chat = new Chat(args[0],args[1],args[2]);
    ...         }
    Et utilise les balises code et /code pour mettre ton code

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    765
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 765
    Points : 1 036
    Points
    1 036
    Par défaut
    Bonjour,

    Avec eclipse sur execute ton main avec ces trois parametres, que tu spécifies dans 'Run Configurations'

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut jms
    Bsr,
    j'ai rentré les arguments dans la fenêtre "Open run dialog" l'anglet arguments, entre eux un espace, et aussi j'ai ajouté le "else" et maintenant ça me donne le message suivant :
    javax.naming.NameNotFoundException: TopicConnectionFactory
    at org.codehaus.spice.jndikit.memory.MemoryContext.doLocalLookup(MemoryContext.java:90)
    at org.codehaus.spice.jndikit.AbstractLocalContext.localLookup(AbstractLocalContext.java:327)
    at org.codehaus.spice.jndikit.AbstractLocalContext.lookup(AbstractLocalContext.java:301)
    at org.codehaus.spice.jndikit.rmi.server.RMINamingProviderImpl.lookup(RMINamingProviderImpl.java:158)
    at org.exolab.jms.server.net.RemoteNamingProvider.lookup(RemoteNamingProvider.java:126)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.exolab.jms.net.orb.DefaultORB$Handler.invoke(DefaultORB.java:572)
    at org.exolab.jms.net.orb.DefaultORB$1.run(DefaultORB.java:530)
    at org.exolab.jms.common.threads.ThreadPool$NotifyingRunnable.run(ThreadPool.java:211)
    at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Thread.java:619)



  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut suite
    voila le code entier :

    //package chap2.chat;

    import javax.jms.*;
    import javax.naming.*;
    import java.io.*;
    import java.io.InputStreamReader;
    import java.util.Properties;

    public class Chat implements javax.jms.MessageListener{
    private TopicSession pubSession;
    private TopicSession subSession;
    private TopicPublisher publisher;
    private TopicConnection connection;
    private String username;

    public Chat() {
    super();
    // TODO Auto-generated constructor stub
    }
    /* Constructor. Establish JMS publisher and subscriber */
    public Chat(String topicName, String username, String password)
    throws Exception {
    // Obtain a JNDI connection
    Properties env = new Properties( );
    // ... specify the JNDI properties specific to the vendor

    InitialContext jndi = new InitialContext(env);

    // Look up a JMS connection factory
    TopicConnectionFactory conFactory =
    (TopicConnectionFactory)jndi.lookup("TopicConnectionFactory");

    // Create a JMS connection
    TopicConnection connection =
    conFactory.createTopicConnection(username,password);

    // Create two JMS session objects
    TopicSession pubSession =
    connection.createTopicSession(false,
    Session.AUTO_ACKNOWLEDGE);
    TopicSession subSession =
    connection.createTopicSession(false,
    Session.AUTO_ACKNOWLEDGE);

    // Look up a JMS topic
    Topic chatTopic = (Topic)jndi.lookup(topicName);

    // Create a JMS publisher and subscriber
    TopicPublisher publisher =
    pubSession.createPublisher(chatTopic);
    TopicSubscriber subscriber =
    subSession.createSubscriber(chatTopic);

    // Set a JMS message listener
    subscriber.setMessageListener(this);

    // Intialize the Chat application
    set(connection, pubSession, subSession, publisher, username);

    // Start the JMS connection; allows messages to be delivered
    connection.start( );

    }
    /* Initialize the instance variables */
    public void set(TopicConnection con, TopicSession pubSess,
    TopicSession subSess, TopicPublisher pub,
    String username) {
    this.connection = con;
    this.pubSession = pubSess;
    this.subSession = subSess;
    this.publisher = pub;
    this.username = username;
    }
    /* Receive message from topic subscriber */
    public void onMessage(Message message) {
    try {
    TextMessage textMessage = (TextMessage) message;
    String text = textMessage.getText( );
    System.out.println(text);
    } catch (JMSException jmse){ jmse.printStackTrace( ); }
    }
    /* Create and send message using topic publisher */
    protected void writeMessage(String text) throws JMSException {
    TextMessage message = pubSession.createTextMessage( );
    message.setText(username+" : "+text);
    publisher.publish(message);
    }
    /* Close the JMS connection */
    public void close( ) throws JMSException {
    connection.close( );
    }
    /* Run the Chat client */
    public static void main(String [] args){
    try{
    if (args.length!=3)
    System.out.println("Topic or username missing");
    else{
    // args[0]=topicName; args[1]=username; args[2]=password
    Chat chat = new Chat(args[0],args[1],args[2]);

    // Read from command line
    BufferedReader commandLine = new
    java.io.BufferedReader(new InputStreamReader(System.in));

    // Loop until the word "exit" is typed
    while(true){
    String s = commandLine.readLine( );
    if (s.equalsIgnoreCase("exit")){
    chat.close( ); // close down connection
    System.exit(0);// exit program
    } else
    chat.writeMessage(s);
    }
    }
    } catch (Exception e){ e.printStackTrace( ); }
    }
    }




    heeeelp

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Points : 1
    Points
    1
    Par défaut ça maarche
    Merciiiii pr votre aide, mnt ça marche, je devais juste changer le nom de la FactoryConnextion , par le nom que j'ai au niveau de mon provider(OpenJms) JmsTopicConnectionFactory au lieu de TopicConnectionFactory :
    TopicConnectionFactory conFactory =
    (TopicConnectionFactory)jndi.lookup("JmsTopicConnectionFactory");


    mnt ça me donne la main pr saisir un texte, mais pour un seul User, et moi je veux que plusieurs utilisateurs peuvent envoyer des messages chose qui n'est pas possible sur eclipse parce que si j'exécute le programme une 2ème fois ça écrase la 1ère console !!!!!

  7. #7
    Membre actif
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Points : 215
    Points
    215
    Par défaut
    Pour faire un chat, tu dois utiliser des "Thread"
    Utilise les balises [.code] et [./code] pour mettre ton commentaire

Discussions similaires

  1. Probléme Application chat en c++
    Par matwia dans le forum C++
    Réponses: 10
    Dernier message: 28/10/2013, 09h38
  2. application chat en socket
    Par zacharqui dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 26/03/2010, 18h23
  3. Besoin d'aide ( application chat posix )
    Par sat05 dans le forum Linux
    Réponses: 3
    Dernier message: 06/02/2009, 12h00
  4. Application Chat lourde
    Par lucfrfr dans le forum Windows Forms
    Réponses: 15
    Dernier message: 20/11/2007, 16h22
  5. [VB]Application : Chat Réseau
    Par ouar dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 25/01/2006, 21h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo