从java调用gnuplot? (Ubuntu的)

我不确定这是否可行,特别是因为Java通过VM运行,但是我可以从Java中调用gnuplot吗? 也许我可以让Java打开一个终端并输入

gnuplot plot ... 

等等?

使用gnujavaplot 。

如果你可以让gnuplot从命令行或标准输入中获取所有输入(或从文件读取它)并将其输出写入文件,那么使用ProcessBuilder执行此操作应该没有问题。

这适用于Debian:

 String[] s = {"/usr/bin/gnuplot", "-e", "set term jpeg large size 800,600;set autoscale; set grid;set format y \"%0.f\";set output \"plot.jpg\";set xdata time;set timefmt \"%Y-%m-%d-%H:%M:%S\";set xlabel \"Dates\";set ylabel \"Data transferred (bytes)\";plot \""+x+"\" using 1:2 title \"Total:"+tot+"\" with linespoints;" }; try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(s); InputStream stdin = proc.getErrorStream(); InputStreamReader isr = new InputStreamReader(stdin); BufferedReader br = new BufferedReader(isr); String line = null; while ((line = br.readLine()) != null) System.err.println("gnuplot:"+line); int exitVal = proc.waitFor(); if (exitVal != 0) log("gnuplot Process exitValue: " + exitVal); proc.getInputStream().close(); proc.getOutputStream().close(); proc.getErrorStream().close(); } catch (Exception e) { System.err.println("Fail: " + e); } 

使用JavaGnuplotHybrid库。

它非常轻(仅有3个核心类),可以使用Java和Gnuplot进行混合编程。

  1. 使用Java和Gnuplot进行混合编程
  2. 重量很轻(只有三个核心类)
  3. 使用Gnuplot代码中的标签来执行函数或使用Java获取字段的值。
  4. 支持Java中Gnuplot的同步和异步运行。 (synchronized:你的java程序将等到你关闭弹出的Gnuplot窗口;异步:你java程序不会等待。)
  5. 将Gnuplot的错误/正常文本输出捕获到java终端
  6. 从xml文件中读取Gnuplot代码
  7. 支持Gnuplot代码模板。

更多细节:

  1. 项目页面: https : //github.com/mleoking/JavaGnuplotHybrid
  2. 示例: https : //github.com/mleoking/JavaGnuplotHybrid/blob/master/javagnuplothybrid/doc/examples.md

您可以使用“exec”命令启动任何外部应用程序。

http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html

有关示例,请参阅此页面。 http://www.rgagnon.com/javadetails/java-0014.html

编辑:我忘记了ProcessBuilder。 Michael Borgwardt的答案是一个更强大的解决方案。