【发布时间】:2011-04-27 06:07:12
【问题描述】:
我是 GWT 的 n00b。 我想使用 RandomAccessFile 从文件中读取并显示在网页上。
我发现 GWT 客户端不支持 RandomAccessFile,要调用 java 函数,我们必须使用 JSNI。
我有一个 JSNI 函数,它调用具有 RandomAccessFile 代码的函数。 当我运行 Web 项目时,出现以下错误,但页面已加载,我能够在文本框中看到文件内容。
错误: 14:58:43.854 [ERROR] [monitoringactivity] 第 14 行没有可用于 java.io.RandomAccessFile 类型的源代码;您是否忘记继承所需的模块?
谁能帮我解决这个错误。
此 RandomAccessFile 代码的实现位于与客户端相同的包中的不同 java 文件中。我必须在 gwt.xml 文件中添加任何内容吗?
代码:
package com.monitor.client;
import java.io.RandomAccessFile;
public class JsniExample {
static String res;
public static String testRandomAccessFile()
{
try {
// Connect
RandomAccessFile pWrite = new RandomAccessFile("/tmp/file1", "rw");
String echoText = "Hello World\n";
System.out.println("Write \n");
// write
pWrite.write ( echoText.getBytes() );
pWrite.close();
RandomAccessFile pRead = new RandomAccessFile("/tmp/file2", "rw");
System.out.println("read\n");
// read response
res = pRead.readLine();
System.out.println("Response: " + res );
pRead.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
public static native String jsniCode()
/*-{
var res = @com.monitor.client.JsniExample::testRandomAccessFile()();
return res.toString();
}-*/;
}
我从 onModuleLOad 调用:res = JsniExample.jsniCode();
【问题讨论】:
-
贴一些代码;你所说的你正在做的事情不可能像你描述的那样。你想完成什么根本不清楚。
-
这不是 JSNI 的预期用途。标记为
native的东西应该是Javascript 代码,而不是Java。您错过了 JSNI 的重点,JSNI 的重点是您可以注入一些 GWT 不会生成或干扰的手动编码的 Javascript。 JSNI Coding Basics。您无法使用 Javascript/GWT 从浏览器访问本地文件系统对象。
标签: java javascript gwt jsni