2013-12-21 111 views
0

我有2个班如何运行Java程序,包括一个.jar文件

CLASS1 (the main class) 
    - calls threading glass 


CLASS2 (the threading class) 
    - calls function 
    - calls json.simple.jar functons 

和一个.jar(https://code.google.com/p/json-simple/

jar/json.simple.jar 

现在主要的问题是,我actualy设法让这两个类与这些命令编译

javac -d . -cp '.:jar/json.simple.jar' *.java; 

这将创建一个名为package1的文件夹,然后当我尝试运行它给我的错误

java javanolo.CLASS1 -jar 'jar/json.simple.jar'; 


Selected (9) IPS ... <-- this is the first **println** 
Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException 
     at javanolo.CLASS1.main(CLASS1.java:70) 
Caused by: java.lang.ClassNotFoundException: org.json.simple.parser.ParseException 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 1 more 

我假设这是因为它没有找到一些json简单的功能。为什么?我已经导入他们

// json encode/decode 
import org.json.simple.JSONValue; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.ParseException; 

,我相信,我已经进口的.jar,因为如果我运行

javac -d . *.java; 


error : 

import org.json.simple.JSONValue; 
^ 
CLASS1.java:14: error: package org.json.simple does not exist 
import org.json.simple.JSONObject; 
^ 
CLASS1.java:15: error: package org.json.simple.parser does not exist 
import org.json.simple.parser.ParseException; 
^ 
CLASS2.java:16: error: package org.json.simple does not exist 
import org.json.simple.JSONValue; 
^ 
CLASS2.java:17: error: package org.json.simple does not exist 
import org.json.simple.JSONObject; 
^ 
CLASS2.java:18: error: package org.json.simple.parser does not exist 
import org.json.simple.parser.ParseException; 
^ 
CLASS2.java:148: error: cannot find symbol 
public Map<String,String> openAndGetGeoDataByProxy(String ip,String port,int timeout) throws IOException, InterruptedException, ParseException 
                    ^
symbol: class ParseException 
location: class CLASS2 
CLASS2.java:99: error: cannot find symbol 
} catch (ParseException ex) { 
^ 
symbol: class ParseException 
location: class CLASS2 
CLASS2.java:188: error: cannot find symbol 
Object jsonObject = JSONValue.parse(line); 
^ 
symbol: variable JSONValue 
location: class CLASS2 
CLASS2.java:191: error: cannot find symbol 
JSONObject jsonArray = (JSONObject)jsonObject; 
^ 
symbol: class JSONObject 
location: class CLASS2 
CLASS2.java:191: error: cannot find symbol 
JSONObject jsonArray = (JSONObject)jsonObject; 
^ 
symbol: class JSONObject 
location: class CLASS2 
CLASS2.java:194: error: cannot find symbol 
JSONObject jsonArray2 = (JSONObject)jsonArray.get("array_result"); 
^ 
symbol: class JSONObject 
location: class CLASS2 
CLASS2.java:194: error: cannot find symbol 
JSONObject jsonArray2 = (JSONObject)jsonArray.get("array_result"); 
^ 
symbol: class JSONObject 
location: class CLASS2 

,所以我知道肯定JSON-simple.jar在使用时汇编。

  1. 主要问题是,我该如何运行CLASS1和CLASS2与该.jar文件?
  2. 为什么基于LINUX的系统与WINDOWS NETBEANS如此不同?我的意思是java是平台独立的...
  3. 何我可以连接NETBEANS到我的服务器槽SFTP,所以我可以直接编码。

谢谢。

编辑TRIES

我曾尝试下面的命令,他们没有工作,它给我的消息,好像我是运行java -help命令

try1 java -cp .;jar/json.simple.jar javanolo.CLASS1

try2 java -cp .;'/root/folder/folder/jar/json.simple.jar' javanolo.CLASS1

try3 java -cp .;/root/folder/folder/jar/json.simple.jar javanolo.CLASS1

任何人都可以帮助我(会更好的聊天)?我真的需要这个

+1

问题可能与相对路径有关。尝试用该jar的完整绝对路径替换json.simple.jar – MTilsted

+1

因为json .jar不在你的类路径中。 http://www.sergiy.ca/how-to-compile-and-launch-java-code-from-command-line/ –

+0

英戈给出了正确的答案,所以你现在会好起来的。但是,我可以建议阅读Java中的命名和编码约定,否则你的问题和代码示例对其他人来说看起来很奇怪。 – Harald

回答

2

有了这个:

java javanolo.CLASS1 -jar 'jar/json.simple.jar' 

你运行你的类并给出了命令行的其余部分,即-jar jar/json.simple.jar作为参数。

你想要的是:

java -cp .;jar/json.simple.jar javanolo.CLASS1 

,或者在UNIX外壳:

java -cp .:jar/json.simple.jar javanolo.CLASS1 

请注意,您的类路径是在编译和执行相同。

+0

你好。我尝试了一些东西,但没有成功,请在主要帖子中查看**编辑试验**。我不知道下一步该怎么做,你能帮我吗?我真的需要这个 – Damian

+0

@Damian在UNIX上,用':'替换';' – Ingo

+0

是的,那是问题所在,我想出了自己,并且忘了设置接受的答案。非常感谢你,现在我明白它是如何工作的......但我不明白为什么JAVA是如此复杂,我的意思是C#是更好的......而且我认为“独立于平台”是一个优势 – Damian