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