public class ScriptProcess {
private String[] command;
public ScriptProcess(String[] c) {
this.command = c;
}
public void exec() {
try {
Process p = Runtime.getRuntime().exec(this.command);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer stringBuffer = new StringBuffer();
String line = null;
while((line = in.readLine()) != null){
stringBuffer.append(line + " --- ");
}
System.out.println(stringBuffer.toString());
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
我可以用这个Java类执行Julia脚本。
例如,这是一个julia脚本:
#main.jl
msgTest = Int64[]
push!(msgTest, 1)
push!(msgTest, 2)
println(msgTest)
然后,我可以初始化ScriptProcess来执行上面的julia脚本:
String[] command = {"C:\\Julia\\bin\\julia.exe", "C:\\doc\\Julia\\main.jl"};
ScriptProcess sp = new ScriptProcess(command);
sp.exec();
一切都很好,我可以在日食的控制台上得到结果:[1,2]
。
但是,如果我将julia脚本的Int64
更改为String
,如下所示:
#main.jl
msgTest = String[]
push!(msgTest, "aaa")
push!(msgTest, "bbb")
println(msgTest)
我运行相同的java项目,我什么也得不到。
但是,我可以使用命令提示符运行julia脚本:
C:\> C:\Julia\bin\julia.exe C:\doc\Julia\main.jl
我可以得到结果:AbstractString["aaa","bbb"]
。
答案 0 :(得分:2)
如果使用String
,新版Julia会生成警告。 String
已更改为AbstractString
。
如果我们在Julia或Julia的某个IDE中使用String
,除了警告之外,事情仍然会很好。但是,如果我们想用另一个语言项目执行julia脚本,我们就不能这样做了。
答案 1 :(得分:0)
由于不能直接回答问题,因此示例代码是现有库(即JuliaCaller)下的基本逻辑,该库随开源许可证一起分发。您可以将Java对象传递给Julia,在Julia一侧进行计算,然后将结果返回Java。这里是链接:JuliaCaller GitHub。
这是一个示例:
List<Double> values = List.of(1.0, 2.0, 10.0, -4.0);
caller.addJuliaObject(JuliaObject.createArrayVariable("a", values));
caller.Execute("using Statistics");
caller.Execute("ave = mean(a)");
double result = caller.getDouble("ave");
assertEquals(2.25, result);