jni绑定,javac错误,意外令牌

时间:2016-10-10 10:00:17

标签: java console java-native-interface token openvr

我们使用jna进行了openvr java绑定,它们通常对jna的说法是正确的,它很容易实现。

相反,它会有一些性能损失。谷歌搜索并阅读一些论文,jna比jni(herehere)慢10到几乎80倍。

对于非关键性能方案,这不会成为问题,但我们遇到了一些性能问题,我们正在尝试解决所有原因,例如绑定等。

我搜索了一段时间,有很多不同的方法来实现这一点,但鉴于我们想要移植的标题相对容易(最后一个着名的单词..)我们正在尝试手动完成。

我是从two most important callsVR_InitVR_ShutDown

开始的
inline IVRSystem *VR_Init( EVRInitError *peError, EVRApplicationType eApplicationType )
{
    IVRSystem *pVRSystem = nullptr;

    EVRInitError eError;
    VRToken() = VR_InitInternal( &eError, eApplicationType );
    COpenVRContext &ctx = OpenVRInternal_ModuleContext();
    ctx.Clear();

    if ( eError == VRInitError_None )
    {
        if ( VR_IsInterfaceVersionValid( IVRSystem_Version ) )
        {
            pVRSystem = VRSystem();
        }
        else
        {
            VR_ShutdownInternal();
            eError = VRInitError_Init_InterfaceNotFound;
        }
    }

    if ( peError )
        *peError = eError;
    return pVRSystem;
}

/** unloads vrclient.dll. Any interface pointers from the interface are
* invalid after this point */
inline void VR_Shutdown()
{
    VR_ShutdownInternal();
}

相应的java class非常简单:

public class HelloVr {

    static {
        System.loadLibrary("openvr_api");
    }

    static final int VRInitError_None = 0, VRApplication_Scene = 1;

    public native IVRSystem VR_Init(ByteBuffer peError, int eApplicationType);

    public native void VR_Shutdown();

    public static void main(String[] args) {
        new HelloVr();
    }

    public HelloVr() {

        ByteBuffer peError = ByteBuffer.allocateDirect(Integer.BYTES).order(ByteOrder.nativeOrder());

        IVRSystem hmd = VR_Init(peError, VRApplication_Scene);

        System.out.println("error: " + peError.getInt(0));
    }

    class IVRSystem {

        private long nativePtr = 0L;
    }
}

现在是时候通过输入

HelloVr.java编译成HelloVr.class
  

javac HelloVr.java

但我得Unexpected Token

PS C:\Users\GBarbieri\Documents\NetBeansProjects\Test\Test\src\test> "C:\Program Files\Java\jdk1.8.0_102\bin\javac.exe"
.\HelloVr.java
Unerwartetes Token ".\HelloVr.java" im Ausdruck oder in der Anweisung.
Bei Zeile:1 Zeichen:66
+ "C:\Program Files\Java\jdk1.8.0_102\bin\javac.exe" .\HelloVr.java <<<<
    + CategoryInfo          : ParserError: (.\HelloVr.java:String) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

为什么?

1 个答案:

答案 0 :(得分:0)

不完全是我想要的理想答案,但它确实有效。

我将PATH直接添加到javac HelloVr.java 环境变量中,只需运行:

  curl -XGET 'http://localhost:9200/document_texts/document_text/_validate/query?rewrite=true' -d '
  {
      "query": {
            "filtered": {
                "query": {
                    "more_like_this": {
                        "ids": ["12345"],
                        "min_term_freq": 1,
                        "max_query_terms": 50,
                        "stop_words": ["this","of"]
                    }
                }
            }
        }
    }'