2013-12-21 6 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, чтобы я мог напрямую его закодировать.

Спасибо.

EDIT ПЫТАЕТСЯ

я попробовал следующие команды, ни один из них не работает, он дает мне сообщение, как я управлял 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

Проблема может быть связана с относительным путем. Попробуйте заменить json.simple.jar полным полным путем для этого jar – MTilsted

+1

Поскольку json .jar не находится в вашем пути к классам. http://www.sergiy.ca/how-to-compile-and-launch-java-code-from-command-line/ –

+0

Ingo дал правильный ответ, так что теперь все будет хорошо. Но могу ли я предложить прочитать о соглашениях об именах и кодировании в 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

Смежные вопросы