0

JMS で簡単なチャット アプリケーションを作成していますが、コードが機能せず、その理由がわかりません。これは私のコードであり、JBoss で使用するため、pub を開いてこれを記述し、[start] をクリックすると Eclipse が次のエラー メッセージを表示します。

<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
4

1 に答える 1

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

これは、引数を与えずにプログラムを開始したことを意味します

次に105行目

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

args が空の場合、args の 0 番目の要素にアクセスしています。

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

編集:

Eclipse で引数の提供を実行するには、次のようにします。

実行 - >実行構成 - > pub を選択 (既に Eclipse で実行しようとしたため) - > 引数を選択 -> プログラム引数の下で、スペースで区切られたパラメーターを指定します。

ピクトリアル ビュー

于 2012-04-30T16:29:24.530 に答える