从Java调用Xinitthreads。 Gnuplot错误

时间:2014-07-03 16:51:18

标签: java linux scala gnuplot

我试图从我的Scala代码启动gnuplot。

我启动了一个ProcessBuilder

的外部流程

但是,当我启动gnuplot时:

gnuplot -p <generated script>

所以,如:

Seq("gnuplot", "-p", scriptname).!

我明白了:

[xcb] Unknown sequence number while processing queue
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
gnuplot: ../../src/xcb_io.c:274: poll_for_event: Assertion `!xcb_xlib_threads_sequence_lost' failed.

我似乎需要拨打XInitThreads

我的问题是:

  • 如何从Java调用该本机方法(我假设我可以在我的Scala代码中使用它)或者如何直接从Scala中执行此操作?
  • 还有其他问题吗?

编辑: 我不明白为什么做这样简单的事情是如此痛苦。我不想花一整天时间挖掘最精细的细节,只是为了绘制一幅图形图。 我只是转而使用JFreeChart。

1 个答案:

答案 0 :(得分:0)

您可以通过My webpage where the problem occurs的Eggplanticus尝试此提示。

fixXInitThreads.cpp

#include <Xlib.h>
#include <stdio.h>
class a{public: a() { XInitThreads(); }};a X;

编译:
g++ -o libfixXInitThreads.so -shared -fPIC -Wl,-soname,libxx.so -L/usr/lib/X11 -I/usr/include/X11 fixXInitThreads.cpp -lX11

并且在main()的第1行放了这个:
System.loadLibrary("fixXInitThreads");
或在当地路径:
System.load(System.getProperty("user.dir")+"/libfixXInitThreads.so");