5

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

gnuplot
plot ...

ETC?

4

5 回答 5

20

使用gnujavaplot

于 2010-07-07T16:05:51.133 回答
3

如果您可以让 gnuplot 从命令行或标准输入(或从文件中读取)获取所有输入并将其输出也写入文件,那么使用ProcessBuilder.

于 2010-07-07T16:02:34.450 回答
1

这适用于 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);
}
于 2011-05-10T21:19:55.723 回答
1

使用 JavaGnuplotHybrid 库。

它的重量非常轻(只有 3 个核心类),并且可以使用 Java 和 Gnuplot 进行混合编程。

  1. 使用 Java 和 Gnuplot 进行混合编程
  2. 重量很轻(只有三个核心类)
  3. 在 Gnuplot 代码中使用标签来执行函数或获取 Java 中的字段值。
  4. 支持 Java 中 Gnuplot 的同步和异步运行。(同步:你的 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
于 2014-04-02T15:25:47.033 回答
0

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

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

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

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

于 2010-07-07T16:05:47.817 回答