【问题标题】:JSNI : GWT :No source code is available for type java.io.RandomAccessFileJSNI:GWT:没有可用于 java.io.RandomAccessFile 类型的源代码
【发布时间】: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


【解决方案1】:

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

JSNIis for creating Javascript "native" code 并在 GWT 编译器中使用它,它与调用 Java 代码无关

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

JavaScript 和 DOM 提供 恶意作者的可能性 交付脚本以在客户端上运行 电脑通过网络。浏览器作者 使用两个包含此风险 限制。首先,脚本运行在 他们只能在其中执行的沙箱 与网络相关的操作,而不是 通用编程任务,例如 操作文件。

【讨论】:

  • 这不是 GWT 的问题。没有解决方法,您无法在浏览器中通过 Javascript 访问文件系统。
  • 但奇怪的是我能够看到文件的内容,即使它抛出了这个错误......另外,当你说服务器端时,我怎样才能在那里实现它以便我可以显示页面..谢谢
猜你喜欢
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多