如何从javascript调用codenameone java类方法?

时间:2016-11-10 14:21:33

标签: javascript codenameone

我有一个codenameone类,其中包含一个上传移动应用程序文件的方法。我想在用户点击上传按钮时从我的javascript函数调用该codenameone类方法。

下面是我的codenameone类方法,它将上传文件。

public void actionPerformed1(){ 
    if (FileChooser.isAvailable()) {
        FileChooser.showOpenDialog("image/*", e2-> {
            String file=null;
            if(e2!=null){
                file = (String)e2.getSource();
            }
            if (file == null) {
                hi.revalidate();
            } else {
                String extension = null;
                if (file.lastIndexOf(".") > 0) {
                    extension = file.substring(file.lastIndexOf(".")+1);
                }
                if ("txt".equals(extension)) {
                    FileSystemStorage fs = FileSystemStorage.getInstance();
                    try {
                        InputStream fis = fs.openInputStream(file);
                        hi.addComponent(new SpanLabel(Util.readToString(fis)));
                    } catch (Exception ex) {
                        Log.e(ex);
                    }
                } else {
                    hi.add("Selected file "+file);
                }
            }
            hi.revalidate();
        });
    }

下面是我的html文件,我将使用javascript调用codenameone actionPerformed1()方法。

<pre>
    type="button" value="call method"    
    onClick = "document.FileChooserDemo.actionPerformed1()" 
</pre>

我可以用javascript调用codenameone方法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

查看JavaDocs for the javascript package,特别是标题为&#34;从Javascript调用Java方法&#34;。

JSObject logger = (JSObject)ctx.get("{}");
logger.set("log", new JSFunction(){

    public void apply(JSObject self, Object[] args) {
        String msg = (String)args[0];
        Log.p("[Javascript Logger] "+msg);
    }

});

ctx.set("window.logger", logger);

然后从JavaScript开始工作:

logger.log('This is a test message');