Applet java抛出了chrome的异常

时间:2013-03-07 00:25:31

标签: java google-chrome exception japplet invocationtargetexception

我正在开发一个带有applet Java的Django站点。

前几天applet开始在我的Chrome浏览器中加载失败。我还在开发中,我认为这是一个缓存问题,所以为了测试我开始使用firefox。

今天applet的开发率为90%,而firefox的工作流畅。没问题。

所以我正在研究一些JS,我打开了chrome(就像它的调试器一样),所以我清理了chrome的缓存文件夹和java插件缓存,然后打开了网站。

小程序无法加载。这是错误:

 java.lang.reflect.InvocationTargetException
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
     at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
     at sun.applet.PluginAppletSecurityContext$5.run(PluginAppletSecurityContext.java:943)
     at java.security.AccessController.doPrivileged(Native Method)
     at sun.applet.PluginAppletSecurityContext.handleMessage(PluginAppletSecurityContext.java:940)
     at sun.applet.AppletSecurityContextManager.handleMessage(AppletSecurityContextManager.java:70)
     at sun.applet.PluginStreamHandler.handleMessage(PluginStreamHandler.java:235)
     at sun.applet.PluginMessageHandlerWorker.run(PluginMessageHandlerWorker.java:78)
 Caused by: java.lang.NumberFormatException: For input string: "0,000000"
     at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1241)
     at java.lang.Double.valueOf(Double.java:504)
     at java.lang.Double.<init>(Double.java:597)
     ... 10 more
 java.lang.NullPointerException
     at sun.applet.PluginAppletViewer.getMember(PluginAppletViewer.java:1020)
     at netscape.javascript.JSObject.getMember(JSObject.java:155)
     at objects.CommunicationWithJS.parseFloors(CommunicationWithJS.java:75)
     at main.MapGenerator.start(MapGenerator.java:27)
     at sun.applet.AppletPanel.run(AppletPanel.java:476)
     at java.lang.Thread.run(Thread.java:722)

奇怪的是,在Firefox上没有问题......

加载时,applet调用页面上的一些JS从站点加载Json。 这个Json被传递给applet。

小程序和页面之间的通信由 netscape 库管理。

加载JSON的JS:

    function getFloors() {
            var xmlHttp = null;

            xmlHttp = new XMLHttpRequest();
            xmlHttp.open( "GET", GET_FLOORS, false );
            xmlHttp.send(null);
            var json = JSON.parse(xmlHttp.responseText);

            return json;
    }

applet上的代码:

public Floor[] parseFloors(URL codebase) {

    JSObject jsonFloors = (JSObject) window.eval(GET_FLOORS);

            // counter of the number of objects
    int i=0;
    for (; i < 50; i++) 
        try {
            if (jsonFloors.getSlot(i) == null)
                break;
        } catch (JSException jse) {
            break;
        }

    Floor[] floors = new Floor[i];

    for (int t=0; t < i; t++) {

        JSObject jsonFloor = (JSObject) jsonFloors.getSlot(t);
        try {
            int numero_di_piano = Integer.parseInt(jsonFloor.getMember(NUMERO_DI_PIANO)+"");
            URL link = new URL(codebase, jsonFloor.getMember(LINK).toString());
            float bearing = Float.parseFloat(jsonFloor.getMember(BEARING).toString());
            int id = Integer.parseInt(jsonFloor.getMember(ID).toString());

            Floor floor = new Floor(numero_di_piano, link, bearing, id);
            floors[t] = floor;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }   
    }
    return floors;
}

错误 CommunicationWithJS.java:75 位于

   int numero_di_piano = Integer.parseInt(jsonFloor.getMember(NUMERO_DI_PIANO)+"");

从服务器返回的值* NUMERO_DI_PIANO *是一个整数,我不明白这种奇怪的行为。

修改

我用firefox和chrome交叉测试了japplet,使用了一些 println 。 只有当我尝试从Json中提取 int 值时才会出现异常。 我成功地提取了一个双字符串。

在firefox上,applet仍在工作...... 在chrome 0上,因为“0,000000”,4成为“4,000000”。

ADDITION

我解决了强制服务器转换字符串中整数的问题。 但我不认为这是正确的工作方式,这是一种解决方法。 所以,如果有人能够提出有效答案,我会指定分数。

1 个答案:

答案 0 :(得分:1)

这不是一个完整的答案,但是基于您所遇到的错误以及我们在加载http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=647706中详述的网站时遇到的类似问题我认为该问题与系统区域设置有关。系统区域设置是否与en_US不同?

由于我还不能理解的原因,当在Firefox中运行Java时,语言环境不会影响格式化方法,但是在Chrome / Chromium上它会影响,这会导致它生成区域设置格式的浮点数(“0例如,在巴西pt_BR语言环境中,0“而不是”0.0“,Java无法正确解析(大概使用与语言环境无关的转换)。

另见Problems using DecimalFormat