从Java调用Xinitthreads。 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。

你可以从这里试试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()的第一行加上:
System.loadLibrary("fixXInitThreads");
或在本地路径:
System.load(System.getProperty("user.dir")+"/libfixXInitThreads.so");