2012-04-30 2 views
0

Я делаю простой чат-приложение с JMS, но мой код не работает, и я не знаю почему. Это мой код, и я использую с JBoss так я открываю паб, и я пишу это, и когда я нажимаю начать Eclipse, дайте мне это сообщение об ошибке:Простой чат с 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

Добро пожаловать в StackOverflow. Пожалуйста, прочитайте [FAQ] (http://stackoverflow.com/faq#questions) о том, как задавать вопросы. Кроме того, измените заголовок вопроса. –

+0

Не знаю, упоминается ли это в FAQ, но я только читаю, насколько это возможно. * «Привет, я хочу ..» * ... перед остановкой. Пожалуйста, добавьте письмо в верхнем регистре в начале каждого предложения, а также слово «я». Это облегчает чтение. Вы бы не хотели, чтобы это было труднее читать, не так ли? –

ответ

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) по мере необходимости.

Edit:

Для того, чтобы запустить аргументированно Eclipse:

Run -> Конфигурация Run -> Select пабе (Так как вы уже пытались запустить его в затмении) -> Выбор аргументов -> Под Программа Довод указать параметры, ограниченные пространства

Pictorial View

+0

привет спасибо за помощь i edit my messeg после вашей помощи, и я добавляю фото, что worng после того, как я это сделаю, я wuld рад за помощь – user1346532

+0

Рад помочь ... любезно согласимся, если это вам помогло – mprabhat

Смежные вопросы