我正在尝试从我的 Scala 代码启动 gnuplot。

我启动一个外部进程 a 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 调用 native 方法(我假设我可以在我的 Scala 代码中使用它)或者如何直接从 Scala 调用?
  • 会不会有其他问题?

  • 编辑:
    我不明白为什么做这样简单的事情会如此痛苦。我不想花一整天的时间去挖掘最细微的细节,只是为了绘制一个可怕的图表。
    我只是切换到使用 JFreeChart。

    最佳答案

    您可以从 here 尝试茄子的这个技巧。

    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");

    关于java - 从 Java 调用 Xinitthreads。 Gnuplot 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24559368/

    10-11 19:31