当前位置: 首页 > 知识库问答 >
问题:

使用JMS进行简单聊天

相弘方
2023-03-14

我正在用JMS制作一个简单的聊天应用程序,但我的代码不起作用,我不知道为什么。这是我的代码,我与JBoss一起使用,所以我打开pub并编写了这段代码,当我单击启动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

共有1个答案

牧梓
2023-03-14
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中运行提供参数,请执行以下操作:

跑-

图示视图

 类似资料:
  • info-jmssender JMS发件人已启动[2013-07-23 17:02:18,752]info-jmssender JMS传输发件人已初始化...在此之后,我创建了JMS消息存储< 并添加调度消息转发处理器 我的代理服务配置如下所示 将消息存储在消息存储区中,但如果endpoint不工作,则转发是错误的,尽管消息在WSO2esb中处理其丢失的消息

  • 在爬虫开发中我们经常会遇到一种反爬虫的手段就是验证码,那么如何才能绕过验证码拿到我们想要的数据呢?这节课我给大家介绍一个破验证码的利器–Pytesseract。 Pytesseract 是 Python 中专门用来识别验证码和字符的常用第三方模块,它是一个根据 Google 开发的 Tesseract 包进行独立封装的产物。由于它在识别验证码方面具有得天独厚的优势,所以经常被爬虫开发程序员用来进行

  • 我正在尝试进行简单的点对点聊天,但在运行该程序后,我遇到了一个异常: 有什么问题吗?我在这方面完全是个初学者。 这是我的代码:

  • 本文向大家介绍Node.js制作简单聊天室,包括了Node.js制作简单聊天室的使用技巧和注意事项,需要的朋友参考一下 看了TCP的有关知识,写了个基于NET的聊天室。 运行截图: 终端: telnet 这里截取了两个网友 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 对于需要刷新以设置的时间间隔呈现给用户的部分数据的简单Web应用程序,仅使用setInterval()从端点获取JSON而不使用适当的轮询框架是否有任何弊端? 出于示例的原因,可以说我每5秒刷新一次处理作业的状态。 问题答案: 根据我的评论: 我将使用 [docs] 并始终在收到上一个响应时调用它。这样,在请求/响应花费的时间超过间隔时间的情况下,可以避免可能的拥塞或函数堆栈或任何您想

  • 本文向大家介绍Android编写简单的聊天室应用,包括了Android编写简单的聊天室应用的使用技巧和注意事项,需要的朋友参考一下 最近写了一个简单的聊天室应用,可以发送表情,更改头像这些功能。主要技术点就是怎样把表情图片放到textview等Ui控件中展示。这里废话不多说,下面是效果图:  这里主要讲下怎样把文本替换到表情,先说下思路,首先我们的图片是保存在本地资源目录drawable中而所有的