我正在開發一個Django網站與Java小程序。Applet Java拋出異常與鉻
幾天前,該applet開始無法在我的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是比傳遞給小程序。
小應用程序和頁面之間的通信由庫管理。
的JS加載的JSON:
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 *是一個整數r,我不明白這個奇怪的行爲。
編輯:
I交叉測試的JApplet的與Firefox和鉻,使用一些的println。 它出來,只有當我嘗試從Json提取一個int值時才顯示異常。 我成功提取了一個double和一個字符串。
在Firefox上,小程序仍在正常工作... 在鉻0成爲「0,000000」,4成爲「4,000000」。
加成
我解決迫使服務器整數轉換成字符串的問題。 但我不認爲這是正確的工作方式,這是一種解決方法。 所以,如果有人能拿出有效答案,我會分配點數。
我發現試圖在同一時間通過多個參數時,這種行爲只存在。我在頁面中有一個JS調用一個只傳遞一個整數的JAVA方法,並且它沒有問題。 – 2013-03-07 01:27:29