gpt4 book ai didi

java - Applet java 用 chrome 抛出异常

转载 作者:行者123 更新时间:2023-12-01 14:47:34 28 4
gpt4 key购买 nike

我正在使用 Java 小程序开发一个 Django 网站。

几天前,我的 Chrome 浏览器中的小程序开始加载失败。我仍在开发中,我认为这是一个缓存问题,因此为了测试我开始使用 Firefox。

目前该小程序已开发完成 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 上运行没有问题......

加载时,小程序会调用页面上的一些 JS 从站点加载 Json。然后将此 Json 传递给小程序。

小程序和页面之间的通信由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;
}

以及小程序上的代码:

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* 是一个整数,我不明白这种奇怪的行为。

编辑:

我使用一些 println 与 Firefox 和 Chrome 交叉测试了 japplet。结果发现,只有当我尝试从 Json 中提取 int 值时,才会出现异常。我成功提取了一个 double 值和一个字符串。

在 Firefox 上,小程序仍然可以工作...在 chrome 上,0 变为“0,000000”,4 变为“4,000000”。

添加

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

最佳答案

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

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

另请参阅Problems using DecimalFormat

关于java - Applet java 用 chrome 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260868/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com