我有一个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方法吗?
谢谢。
答案 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');