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

标签 java

我正在尝试运行 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

Error: Could not find or load main class:.Users.david.Documents.RWorkingDir.Gibbs.Gibbs
Caused by: 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

Error: Unable to initialize main class Gibbs
Caused by: 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);
        }
    } 
}

它可以使用以下命令从操作系统 shell 进行编译和独立运行:

javac Gibbs.java
java Gibbs 10 1000 1

最佳答案

您需要从包含 .class 的目录运行 java 命令,并提供与 编译期间相同的 -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 .

关于java - 运行调用外部库的java代码时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54080481/

相关文章:

java - jackson + build 者模式?

java - 无法读取文件异常

java - JPA:Map<Entity1,Set<Entity2>> 可能吗?

java - 获取事件的节点坐标并从 BufferedImage Javafx 读取 RGB

java - Java 中的抽象类和方法,继承

java - 如何指定 MongoDB 中多个表之间的 @CollectionTable 关系?

java - 单击“删除”按钮从数据库和 ListView 中删除项目

java - 从 Cordova 插件在服务中启动 Vitamio

java - 使用 Selenium 从 google 注册页面访问下拉列表

java - 如何使用 SAX 解析器删除元素