簡體   English   中英

運行調用外部庫的 java 代碼時出錯

[英]Error running java code that calls external library

我正在嘗試運行在https://darrenjw.wordpress.com/2011/01/01/calling-java-code-from-r/ 上找到的一些代碼。 它提到“它依賴於 Parallel COLT,必須安裝並在 Java CLASSPATH 中”。 這就是我正在努力做的事情。

這就是我所做的(我已經包含了我的完整路徑/目錄結構,以防指向某些錯誤)

我下載了 ParallelCOLT 並保存在目錄中

C:/Users/david/Documents/RWorkingDir/javaJAR/ParallelColt

我保存了目錄中“獨立Java代碼”部分的代碼(也在下面給出)

C:/Users/david/Documents/RWorkingDir/Gibbs/Gibbs.java

How to include jar files with java file and compile in command prompt 中得到提示,我嘗試使用設置 ParallelColt 的路徑

javac -classpath ".;C:/Users/david/Documents/RWorkingDir/javaJAR/ParallelColt/parallelcolt-0.9.4.jar;" 
         C:/Users/david/Documents/RWorkingDir/Gibbs/Gibbs.java # split for presentation

這將在沒有(可見)錯誤的情況下執行並在Gibbs目錄中生成Gibbs.class文件。

我一直無法毫無錯誤地運行它:

C:\>java C:/Users/david/Documents/RWorkingDir/Gibbs/Gibbs 10 1000 1

錯誤:無法找到或加載主類:.Users.david.Documents.RWorkingDir.Gibbs.Gibbs
引起:java.lang.ClassNotFoundException:C:.Users.david.Documents.RWorkingDir.Gibbs.Gibbs

並嘗試從實際目錄運行

C:\>cd C:/Users/david/Documents/RWorkingDir/Gibbs/
C:\Users\david\Documents\RWorkingDir\Gibbs>java Gibbs 10 1000 1

錯誤:無法初始化主類 Gibbs
引起:java.lang.NoClassDefFoundError:cern/jet/random/tdouble/engine/DoubleRandomEngine

我讀過“找不到或無法加載主類”是什么意思? 但沒有發現錯誤。 請問我的錯誤在哪里?


來自網頁的代碼:

import java.util.*;
import cern.jet.random.tdouble.*;
import cern.jet.random.tdouble.engine.*;

class Gibbs {

    public static void main(String[] arg) {
        if (arg.length != 3) {
            System.err.println("Usage: java Gibbs <Iters> <Thin> <Seed>");
            System.exit(1);  
        }
        int N = Integer.parseInt(arg[0]);
        int thin = Integer.parseInt(arg[1]);
        int seed = Integer.parseInt(arg[2]);
        DoubleRandomEngine rngEngine=new DoubleMersenneTwister(seed);
        Normal rngN=new Normal(0.0,1.0,rngEngine);
        Gamma rngG=new Gamma(1.0,1.0,rngEngine);
        double x=0,y=0;
        System.out.println("Iter x y");
        for (int i=0;i<N;i++) {
           for (int j=0;j<thin;j++) {
               x=rngG.nextDouble(3.0,y*y+4);
               y=rngN.nextDouble(1.0/(x+1),1.0/Math.sqrt(x+1));
           }
        System.out.println(i+" "+x+" "+y);
        }
    } 
}

它可以使用以下命令從 OS shell 編譯並獨立運行:

javac Gibbs.java
java Gibbs 10 1000 1

您需要從包含.class的目錄運行java命令,並提供與javac編譯期間相同的-classpath

cd C:/Users/david/Documents/RWorkingDir/Gibbs/
java -classpath ".;C:/Users/david/Documents/RWorkingDir/javaJAR/ParallelColt/parallelcolt-0.9.4.jar;" Gibbs 10 1000 1

如果您覺得這很乏味,請考慮構建一個可執行的 JAR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM