2012-04-30 14 views
0

私はJMSで単純なチャットアプリケーションを作っていますが、私のコードは機能していません。これは私のコードであると私はパブを開いて、私はこれを書いて、私は開始]をクリックするとEclipseは私にこのエラーメッセージ与えるので、私は、JBossを使用します。JMSとの簡単なチャット

<pre> 
Topic or username missingjava.lang.ArrayIndexOutOfBoundsException: 0 
    at chat.pub.main(pub.java:105) 
</pre> 

and this is the code, what is the problem? 

    package chat; 

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

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

     /* Constructor. Establish JMS publisher and subscriber */ 
     public pub(String topicName, String username, String password) 
     throws Exception { 
      // Obtain a JNDI connection 
      Properties env = new Properties(); 
      env.put(Context.SECURITY_PRINCIPAL, "guest"); 
      env.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); 
      env.setProperty("java.naming.provider.url", "localhost:1099"); 
      env.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming"); 

      // ... 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 publisher1 = 
       pubSession.createPublisher(chatTopic); 
      TopicSubscriber subscriber = 
       subSession.createSubscriber(chatTopic); 

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

      // Intialize the Chat application 
      set(connection, pubSession, subSession, publisher1, 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"); 

       // args[0]=topicName; args[1]=username; args[2]=password 
       pub chat = new pub(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(); } 
     } 
    } 
    i do this ![enter image description here][1] 
    and now i get this eroor 
    ![enter image description here][2] 
    and i dont no what i do not ok i will be happy for help thanks!! 


     [1]: http://i.stack.imgur.com/c04o1.gif 
     [2]: http://i.stack.imgur.com/dxCIU.gif 
+2

ようこそスペースで区切られたパラメータを指定します。質問の作成方法については、[FAQ](http://stackoverflow.com/faq#questions)をお読みください。また、質問のタイトルを変更します。 –

+0

FAQに言及されているかどうか分かりませんが、私はこれまでに読んでいます。* "hi i want .." * ..停止する前に。すべての文の先頭に大文字を、「I」という単語を追加してください。これにより、読みやすくなります。あなたはそれを**読みにくいようにしたくないでしょうか? –

答えて

2
java.lang.ArrayIndexOutOfBoundsException: 0 at chat.pub.main(pub.java:105) 

は、それはあなたがそれを引数を与えることなく、プログラムを開始したことを

次にラインで105

pub chat = new pub(args[0],args[1],args[2]); 

あなたは引数が空の引数の0番目の要素にアクセスしています。

プログラムを再実行し、必要に応じてパラメータ(3)を指定します。

編集:Eclipseでの引数を提供し実行するために

実行 - >実行構成 - >セレクトパブ(すでに日食でそれを実行しているしようとしたので) - >を選択引数 - >の下でプログラムの引数はStackOverflowのに

Pictorial View

+0

おかげさまで助けてくれてありがとう私はあなたの助けを借りてメッセージを編集して写真を追加します。私はこれをやった後に助けてくれることを嬉しく思います。 – user1346532

+0

助けを借りて嬉しいです。 – mprabhat

関連する問題