我正在拼命地尝试让Java和gnuplot表现得更好。我已经开始使用JavaPlot并将jar添加到类路径中(使用Eclipse)。
我还下载了gnuplot,并把它放在了一个安全的地方。
第一个问题,JavaPlot给出的所有例子都假设你把gnuplot放在了正确的位置,我不知道这是在哪里。因此,他们的示例如下:
import com.panayotis.gnuplot.JavaPlot;
public class test {
public static void main(String[] args) {
JavaPlot p = new JavaPlot();
p.addPlot("sin(x)");
p.plot();
}
}只有在将gnuplot添加到类路径中时才能工作,有没有关于它可能在哪里以及如何添加的想法?
不过不用担心,因为您可以在JavaPlot的构造函数中定义gnuplot的位置,如下所示:
import com.panayotis.gnuplot.JavaPlot;
public class test {
public static void main(String[] args) {
JavaPlot p = new JavaPlot("D:/Eclipse/gnuplot/binary/pgnuplot.exe");
p.addPlot("sin(x)");
p.plot();
}
}这做了一些事情,如果你速度很快,你可以看到一个图形出现(正确地,可以看到正弦波),然后立即消失。我在网上读到,在实际的gnuplot应用程序中,这在使用Windows时是很常见的,并且必须在绘图后添加'-persist‘。幸运的是,JavaPlot也有一个函数可以做到这一点:
p.setPersist(true);但在我的情况下,它什么也做不了。那么第二个问题,有没有人以前用过gnuplot、JavaPlot和Windows764位,并且知道怎么做?从我的谷歌,我了解到pgnuplot是正确的.exe运行?
我遗漏了什么?我做错了什么?
发布于 2012-02-20 12:56:42
我想我可能有一个解决办法,因为我今天在Windows7(虽然这里是32位)上访问JavaPlot时遇到了同样的事情。是的,pgnuplot.exe是您想要的,但是如果您不想显式地使用setPersist,那么您不需要显式地使用它,因为JavaPlot会为您做这件事。我所要做的就是浏览源代码并注释掉一行代码。
在GnuPlotParameters中,我看到了以下代码
/* Finish! */
bf.append("quit").append(NL);这是198-199行。然后绘图窗口将保持打开状态。现在,这样做也是为了让gnuplot保持开放。如果你不介意,你可以这样看你的图表。我还没有想出如何关闭gnuplot,同时让绘图窗口保持打开状态。
编辑:
也许更合适的方法是不注释掉第199行,而使用下面的代码:
bf.append("pause -1").append(NL);
/* Finish! */
bf.append("quit").append(NL);以这种方式,暂停对话框出现。这使您可以查看绘图。当您关闭该对话框时,所有内容都会消失。
发布于 2013-03-06 04:06:57
我使用eclipse进行调试,并且碰巧正在使用这个包。我想出了怎么解决这个问题。将以下内容添加到代码中。由于某些原因,setPersist(true)似乎无法工作。
p.set("term", "x11 persist");发布于 2013-03-12 17:07:29
尝尝这个
try {
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("D:/Projet/X-Gnuplot_4.6.0_rev6/Bin/gnuplot/bin/gnuplot.exe");
java.io.OutputStream opStream = proc.getOutputStream();
PrintWriter gp = new PrintWriter(new BufferedWriter(new OutputStreamWriter(opStream)));
gp.println("plot sin(x); pause mouse close;\n");
gp.close();
int exitVal = proc.waitFor();
System.out.println("Exited with error code "+exitVal);
} catch(Exception e) {
System.out.println(e.toString());
e.printStackTrace();
}对我来说很管用
https://stackoverflow.com/questions/9331548
复制相似问题