2013-12-21 112 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