我正试图运行我在互联网上找到的这个例子。当它到达以下行时,它会终止并出现以下错误。错误和sample-json.txt粘贴在示例代码下面。我错过了一些明显的东西吗?
JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt );
进口:
package com.discursive.answers;
import java.io.InputStream;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
import org.apache.commons.io.IOUtils;
public class JsonParsing {
public static void main(String[] args) throws Exception {
InputStream is = JsonParsing.class.getResourceAsStream( "sample-json.txt");
String jsonTxt = IOUtils.toString( is );
JSONObject json = (JSONObject) JSONSerializer.toJSON( jsonTxt );
double coolness = json.getDouble( "coolness" );
int altitude = json.getInt( "altitude" );
JSONObject pilot = json.getJSONObject("pilot");
String firstName = pilot.getString("firstName");
String lastName = pilot.getString("lastName");
System.out.println( "Coolness: " + coolness );
System.out.println( "Altitude: " + altitude );
System.out.println( "Pilot: " + lastName );
}
}
Error:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
Disconnected from the target VM, address: '127.0.0.1:59138', transport: 'socket'
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
st java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at com.discursive.answers.JsonParsing.main(JsonParsing.java:28)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.lang.exception.NestableRuntimeException
这是打开的sample-json.txt文件。
{'foo':'bar',
'coolness':2.0,
'altitude':39000,
'pilot':{'firstName':'Buzz',
'lastName':'Aldrin'},
'mission':'apollo 11'}
答案 0 :(得分:3)
是的,这绝对是一个类路径问题。您可以在没有第三方库的情况下编译项目,但如果没有类路径上的库,则无法运行它。
我已将您的代码复制到我的本地系统并验证我收到了相同的(初始)异常。抓取commons-lang-2.6.jar
文件并将其放在我的类路径后,我现在收到以下异常:
$ java com.so.Q8187623
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
at net.sf.json.AbstractJSON.<clinit>(AbstractJSON.java:53)
at net.sf.json.util.CycleDetectionStrategy.<clinit>(CycleDetectionStrategy.java:36)
at net.sf.json.JsonConfig.<clinit>(JsonConfig.java:65)
at net.sf.json.JSONSerializer.toJSON(JSONSerializer.java:84)
at com.so.Q8187623.main(Q8187623.java:15)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 5 more
所以,按照你的方式沿着兔子洞向你的课程路径添加课程......
答案 1 :(得分:0)
立即错误看起来像是因为您从类路径中丢失了commons-lang.jar
。但是,鉴于无法找到的类是一个例外,我强烈怀疑当你修复了这个错误时,你会立即得到另一个......以NestedRuntimeException
被抛出的形式
答案 2 :(得分:0)
我碰到了同样的问题。我使用commons-collections 3.2.2 with commons-lang 2.6。 将commons-collection降级为3.2.1后问题得到了解决。