开发者

Calling gnuplot from java? (ubuntu)

开发者 https://www.devze.com 2023-01-05 21:00 出处:网络
I\'m not sure if this is possible, especially since Java runs through a VM, but 开发者_Go百科can I call gnuplot from within Java? Perhaps I could have Java open a terminal and input

I'm not sure if this is possible, especially since Java runs through a VM, but 开发者_Go百科can I call gnuplot from within Java? Perhaps I could have Java open a terminal and input

gnuplot
plot ...

etc?


Use gnujavaplot.


If you can get gnuplot to take all input from the command line or standard input (or read it from a file) and write its output to files as well, then there should be no problem doing this using ProcessBuilder.


This works on 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);
}


Use the JavaGnuplotHybrid library.

It is very light weight (only 3 core classes) and enables hybrid programming with Java and Gnuplot.

  1. Hybrid programming with Java and Gnuplot
  2. Very light weight (just three core Classes)
  3. Use tags in Gnuplot code to execute functions or get fields' values in Java.
  4. Support both synchronized and asynchronized running of Gnuplot in Java. (synchronized: your java program will wait until you close the popped Gnuplot window; asynchronized: you java program will not wait.)
  5. Capture error/normal text output of Gnuplot to the java terminal
  6. Read Gnuplot code from xml files
  7. Support Gnuplot code template.

For more details:

  1. Project page: https://github.com/mleoking/JavaGnuplotHybrid
  2. Examples: https://github.com/mleoking/JavaGnuplotHybrid/blob/master/javagnuplothybrid/doc/examples.md


You can launch any external application using the "exec" commands.

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

See this page for a few examples. http://www.rgagnon.com/javadetails/java-0014.html

EDIT: I forgot about ProcessBuilder. Michael Borgwardt's answer is a more robust solution.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号