在Haxe中与Java函数接口

时间:2016-02-24 13:02:03

标签: java haxe

我试图使用“extern”从Haxe调用外部Java函数。

Haxe Code:

extern class Ext
{
   public static function test():String;
}

class Sample 
{
   public static function main()
   {
       trace(Ext.test());
   }
}

Java代码:

public class Ext
{   
    public static String test()
    {
        return "Hello";
    }
}

Sample.hx和Ext.java文件都在同一个文件夹中。

当我尝试执行 haxe -main Sample -java Sample 时,出现以下错误。

C:\Users\ila5\Desktop\CPP>haxe -main Sample -java Sample
haxelib run hxjava hxjava_build.txt --haxe-version 3201 --feature-level 1
javac.exe "-sourcepath" "src" "-d" "obj" "-g:none" "@cmd"
src\haxe\root\Sample.java:33: error: cannot find symbol
                haxe.Log.trace.__hx_invoke2_o(0.0, haxe.root.Ext.test(), 0.0, new haxe.lang.DynamicObject(new java.lang.String[]{"className", "fileName", "methodName"}, new java.lang.Object[]{"Sample", "Sample.hx", "main"}, new java.lang.String[]{"lineNumber"}, new double[]{((double) (((double) (10) )) )}));
                                                            ^
  symbol:   class Ext
  location: package haxe.root
1 error
Compilation error
Native compilation failed
Error: Build failed

我想了解构建失败的原因。有任何想法吗?

3 个答案:

答案 0 :(得分:2)

我不确定您是否需要使用-lib或其他内容来引用您的Java代码?

但通常使用Java目标,使用jar文件要简单得多。通过键入haxe --help,您将看到列出的相关命令,我从未需要为Java目标手写外部函数。

-java-lib <file>:添加外部JAR或类目录库

答案 1 :(得分:1)

这里解释了失败的原因

https://groups.google.com/forum/#!topic/haxelang/EHeoGN_Ppvg

我尝试使用类路径和各种选项进行设置,但没有得到解决方案,我认为手动对java目标进行externs只是有点繁琐。使用Java编译器创建jar并让haxe自动生成externs,除非你遇到问题然后将其报告给hxJava存储库,真的更好。

答案 2 :(得分:1)

使用getNumberOfCameras

-java-lib

# build.sh
haxe Main.hx -main Main -java-lib javalib/ -java out

// ./Main.hx
import external.*;

class Main {
    public static function main() {
        trace(external.ExternalClass.myFunction());
    }
}

// ./javalib/external/ExternalClass.java package external; public class ExternalClass { public static String myFunction() { return "External Java function"; } } ./javalib/external/ExternalClass.class

的输出