运行调用外部库的Java代码时出错

时间:2019-01-07 19:18:37

标签: java

我正在尝试运行在https://darrenjw.wordpress.com/2011/01/01/calling-java-code-from-r/上找到的一些代码。它提到“ 它依赖于并行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.class目录中生成了Gibbs文件。

我一直无法正确运行它:

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

我已读过What does "Could not find or load main class" mean?,但没有发现错误。请问我的错误在哪里?


网页代码:

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

1 个答案:

答案 0 :(得分:2)

您需要从包含java的目录中运行.class命令,并提供与-classpath编译期间相同的javac

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

如果您觉得这很乏味,请考虑构建an executable JAR