【问题标题】:Getting NullPointerException when running simple JMS运行简单 JMS 时出现 NullPointerException
【发布时间】:2013-08-27 08:09:51
【问题描述】:

我正在尝试运行一个简单的 JMS 应用程序,不幸的是得到了 NullPointException 。以下是应用程序文件的链接:

1. Producer.java

2. SynchConsumer.java

使用的工具:Eclipse 和 GlassFish

以下是例外

Exception in thread "main" java.lang.NullPointerException
at coreservlets.Producer.main(Producer.java:96)

任何插入此内容的闪存都将不胜感激。

【问题讨论】:

  • 为什么我的问题被否决了?????
  • 不知道 - 可能是因为您链接到代码而不是发布它。无论如何,看起来你的 DI 配置没有被拾取。
  • 我回答只是因为我有 5 分钟的时间,但你被否决了,因为你的问题问得非常糟糕。
  • 听起来对我的问题投反对票的人对我有很大的不利影响:D
  • 反对票不是针对个人的,而是针对问题本身。人们可能对这个问题投了反对票,因为它不清楚且不完整。您甚至没有将您的代码作为问题的一部分。

标签: java jms


【解决方案1】:

如果您在没有任何容器的情况下运行独立应用程序,@Resource 注入将不起作用。相反,您必须对连接工厂和队列/主题进行手动 JNDI 查找:

例子:

    final Properties initialContextProperties = new Properties();

    final String factory = "jms/ConnectionFactory";
    final String queueName = "jms/Queue";

    //

    final InitialContext ic = new InitialContext(initialContextProperties);

    final QueueConnectionFactory qcf = (QueueConnectionFactory) ic
            .lookup(factory);
    final Queue queue = (Queue) ic.lookup(queueName);

InitialContext的配置看这里:Glassfish V3.x and remote standalone client

【讨论】:

    【解决方案2】:
    connectionFactory.createConnection();
    

    connectionFactory,即使是静态的,也永远不会被初始化。由于这个原因,它是空的,当您尝试访问其中的方法时,您会得到空指针。

    两种修复方式。

    如果方法是静态的,不要声明var,直接调用:

    ConnectionFactory.createConnection();
    

    如果方法不是静态的(奇怪,对于一个静态的类),你必须这样做:

    private ConnctionFactory connectionFactory = new ConnectionFactory();
    

    【讨论】:

      猜你喜欢
      • 2019-03-24
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多