Need to specify class name in environment or system property, or as an applet parameter, or in an ap

javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(
NamingManager.java:645)
    at javax.naming.InitialContext.getDefaultInitCtx(
InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(
InitialContext.java:325)
    at javax.naming.InitialContext.lookup(
InitialContext.java:392)
    at Chat.<init>(
Chat.java:56)

    at Chat.main(Chat.java:22)


这是《Java消息服务》里第二章的程序编译出的错,哥可是完完整整按照书本指示来做的。问题的缘由是没有找到jndi.properties文件。

我可在工程所在目录(即有.classpath),src目录下都放了jndi.properties,可还是用eclipse编译总是出错。

但是命令行执行:javac Chat.java却可以执行,且编译成功 & 运行成功。

eclipse怎么了???

不过如果非要在eclipse下编译执行的话,这暂时有个解决方法,可以不用jdni.properties文件,用下面的方法:

  Properties p = new Properties();
		p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
		p.put(Context.PROVIDER_URL, "tcp://localhost:61616");
		p.put(Context.SECURITY_PRINCIPAL, "system");
		p.put(Context.SECURITY_CREDENTIALS, "manager");
		p.put("connectionFactoryNames", "topicCF");
		p.put("topic.topic1", "jms.topic1");


有解决方案了再更新。


有新发现:

真的让人很囧,网上查了那么多都说jndi.properties应该放在src目录下,可是放在bin目录下才是王道,至少编译成了。(我是指在eclipse里)

不懂eclipse,不懂classpath

——2012-3-28 21:25:12更新

环境:

OS: Windows XPsp3

Eclipse SDK: Version: 3.5.2 Build id: M20100211-1343

ActiveMQ 5.4.3



`javax.naming.NoInitialContextException`是一个异常类,它属于Java的命名和目录服务(JNDI)API的一部分。当尝试访问命名服务,但是没有正确地配置初始上下文环境时,就可能抛出这个异常。具体来说,这个异常提示需要在环境变量或系统属性中指定类名。 这个异常通常发生在以下情况: 1. 在使用JNDI之前,没有配置初始上下文环境(InitialContext),即没有指定JNDI提供者、环境属性、工厂类等。 2. 程序中缺少必要的JNDI服务实现库,或者在系统属性中没有正确指定JNDI服务的类名。 要解决这个异常,你需要检查代码中与JNDI相关的配置部分,确保提供了所有必要的环境属性,例如: - `java.naming.factory.initial`:指定JNDI提供者初始化时使用的工厂类的类名。 - `java.naming.provider.url`:指定JNDI服务提供者的位置。 - 其他环境属性,如认证信息等。 例如,如果你在Java代码中使用JNDI查找对象,你可能需要先创建一个`InitialContext`对象,并且提供必要的环境参数。 ```java Properties props = new Properties(); props.put("java.naming.factory.initial", "com.sun.jndi.cosnaming.CNCtxFactory"); props.put("java.naming.provider.url", "iiop://localhost:1050"); InitialContext ctx = new InitialContext(props); ``` 在这个例子中,`props`对象被用来设置初始化环境,指定了工厂类和JNDI服务的位置。然后,使用这些属性创建了一个`InitialContext`实例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值