0

我是 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();

4

1 回答 1

3

GWT不支持所有File相关功能,只能在服务端使用。GWT 被交叉编译为 Javascript 并在浏览器上运行,您只能访问在浏览器中运行的 Javascript 可以访问的内容,这在文件系统上什么都没有。

JSNI 用于创建 Javascript “本机”代码并在 GWT 编译器中使用它,它与调用 Java 代码无关。

您必须编写从网站上的文件读取的代码,该文件正在从服务器上执行的文件中读取,并RPC以某种方式将该数据发送到浏览器。

JavaScript 和 DOM 为恶意作者提供了通过 Web 传递脚本以在客户端计算机上运行的可能性。浏览器作者使用两个限制来控制这种风险。首先,脚本在沙箱中运行,它们只能执行与 Web 相关的操作,不能执行诸如操作文件之类的通用编程任务。

于 2011-04-26T20:27:52.880 回答