[英]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.