Calling gnuplot from java? (ubuntu)
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.
- Hybrid programming with Java and Gnuplot
- Very light weight (just three core Classes)
- Use tags in Gnuplot code to execute functions or get fields' values in Java.
- 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.)
- Capture error/normal text output of Gnuplot to the java terminal
- Read Gnuplot code from xml files
- Support Gnuplot code template.
For more details:
- Project page: https://github.com/mleoking/JavaGnuplotHybrid
- 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.
精彩评论