-1

Linux/ubuntu で Java プログラムを実行できません。
私はこの問題に丸一日取り組んできましたが、解決策が見つからないようです。Windows 7 マシンで Eclipse を使用して小さな Java プログラムを作成しましたが、問題なく動作します。これが私のコードです:

//start of java program jsonReader
package jsonReader;
//imports needed to run program
import java.io.FileNotFoundException;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.*;

インポート org.codehause.jackson.. を機能させるために、プロジェクトに次の jar ファイルを手動で含める必要がありました: jackson-all-1.9.11.jar

    //class jsonReader
    public class jsonReader {
    //start of main 
            public static void main (String[] args) throws FileNotFoundException {

この残りの部分は、問題なく動作する私のプログラムです。

私のプロジェクトの次のステップは、Ubuntu - コマンドラインで実行することです。私は Eclipses でエクスポートを行いました: ファイル -> エクスポート -> 一般 -> アーカイブ ファイル -> Zip ファイルを作成しました。

この zip ファイルは、私の linux/ubuntu 環境に転送されました。そこから、ファイルを解凍しました。これはディレクトリ構造です:

私が持っているホームディレクトリに:

/jsonReader --> has the following directories in it:
               -/bin/jsonReader/jsonReader.class
               -/lib/jackson-all-1.9.11.jar
               -/src/jsonReader/jsonReader.java
               -.classpath (file); and a few other files.

/jsonReader/src/jsonReader で、次のコマンドを実行します: javac jsonReader.java --> 次のエラーが発生します:

    jsonReader.java:6: package org.codehaus.jackson.map does not exist
    import org.codehaus.jackson.map.*;
    ^
    jsonReader.java:7: package org.codehaus.jackson does not exist
    import org.codehaus.jackson.*;
    ^

次に、次のコマンドを実行します。

javac -classpath /jsonReader/lib/jackson-all-1.9.11.jar jsonReader.java 

エラーは発生しません。このコマンドは、/src/jsonReader ディレクトリに jsonReader.class ファイルを作成します。次のコマンドを使用してファイルを実行しようとしました。

java jsonReader 

次のエラーが表示されます。

Exception in thread "main" java.lang.NoClassDefFoundError: jsonReader (wrong name: jsonReader/jsonReader)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: jsonReader. Program will exit.

これは、コマンド ラインでこれを実行したときに表示されるエラー メッセージ全体です。

このエラーが発生する理由と解決方法がわかりません。

4

1 に答える 1

0

You will have to run the program like so

java -cp /jsonReader/lib/jackson-all-1.9.11.jar jsonReader.jsonReader 

Assuming the jackson jar is in /jsonReader/lib.

You need to use the fully qualified class name of the class whose main method you want to run.


An example so it can work.

Create the following structure

/project
    /src
        /jsonReaderTemp
            /jsonReader.java
    /bin 
        /jsonReaderTemp
            /jsonReader.class
    /lib
        /jackson-all-1.9.11.jar

You can either create it manually or use the command line to do it, up to you.

With the above, cd to project and run

java -cp lib/jackson-all-1.9.11.jar;bin jsonReaderTemp.jsonReader

Note the ; as a separator for classpath directories.


Note that java convention states that class names should start with an uppercase character, so JsonReader and package names should be all lowercase, separating words with . if you need to (but there shouldn't be words like that).

于 2013-09-24T18:43:58.867 に答える