2009-06-12 47 views
0

我今天看到了有關Javascript_Java_Interaction的文章在:Javascript_Java_Interaction小程序 「代碼庫」 的問題

http://www.rgagnon.com/javadetails/java-0184.html 
[ You can try the working version on that site ] 
So I tried it on my PC, after some simple format change the files look like this : 

========================= ================================================== =================

[C:/Dir_Fit/Javascript_Java_Interaction.html] 

    <FRAMESET ROWS="100%,*"> 
     <FRAME NAME="mainFrame" SRC="Javascript_Java_Interaction_Visible_Page.html" border=0> 
     <FRAME NAME="scriptFrame" SRC="Javascript_Java_Interaction_Invisible_Page.html" border=0> 
    </FRAMESET> 
-------------------------------------------------------------------------------------------- 

[C:/Dir_Fit/Javascript_Java_Interaction_Invisible_Page.html] 

<HTML> 
    <HEAD> 
    <SCRIPT> 
     function replace(s,t,u) 
     { 
     i=s.indexOf(t); 
     r=""; 
     if (i==-1) return s; 
     r+=s.substring(0,i)+u; 
     if (i+t.length<s.length) r+=replace(s.substring(i+t.length,s.length),t,u); 
     return r; 
     } 

     function getAndSendMessage() 
     { 
     theMessage=document.location.search.substring(1,255) 
     if (theMessage.length>0) 
     { 
      // replace all '+" by space 
      theMessage=replace(theMessage,'+',' ') 
      window.parent.mainFrame.showMessage(unescape(theMessage)) 
     } 
     } 
    </SCRIPT> 
    </HEAD> 
    <BODY onLoad="getAndSendMessage();"></BODY> 
</HTML> 
----------------------------------------------------------------------------------------- 
[C:/Dir_Fit/Javascript_Java_Interaction_Visible_Page.html] 

<HTML> 
    <HEAD><SCRIPT>function showMessage(s) { alert(s) }</SCRIPT></HEAD> 
    <BODY> 
    <H1>Simple Java - Javascript interaction</H1><P> 
    <APPLET CODEBASE="file://C:/Dir_Fit/build/classes/" CODE="Javascript_Java_Interaction_Demo.class" WIDTH=150 HEIGHT=150></APPLET> 
    </BODY> 
</HTML> 
----------------------------------------------------------------------------------------- 
Source : [C:/Dir_Fit/src/Javascript_Java_Interaction_Demo.java] 
class : [C:/Dir_Fit/build/classes/Javascript_Java_Interaction_Demo.class] 

import java.applet.Applet; 
import java.awt.*; 

public class Javascript_Java_Interaction_Demo extends Applet 
{ 
    TextField aMessage; 
    Button sendButton; 

    public void init() 
    { 
    aMessage=new TextField(20); 
    add(aMessage); 
    sendButton=new Button("Send to Javascript"); 
    add(sendButton); 
    } 

    public boolean action(Event e,Object o) 
    { 
    if (e.target.equals(sendButton)) 
    { 
     try { getAppletContext().showDocument(new java.net.URL(getCodeBase(),"Javascript_Java_Interaction_Invisible_Page.html?"+java.net.URLEncoder.encode(aMessage.getText())),"scriptFrame"); } 
     catch (Exception ex) { ex.printStackTrace(); } 
    } 
    return true; 
    } 
} 

========================== ================================================== ==============

它顯示頁面上的小程序[Javascript_Java_Interaction。 HTML],但如果我在一些文本類型,然後單擊該按鈕,沒有任何反應,這個問題是在下面一行:

<APPLET CODEBASE="file://C:/Dir_Fit/build/classes/" CODE="Javascript_Java_Interaction_Demo.class" WIDTH=150 HEIGHT=150></APPLET> 

所以我複製的類文件在同一目錄作爲HTML文件[C:/Dir_Fit /]並將上面的行更改爲:

<APPLET CODE="Javascript_Java_Interaction_Demo.class" WIDTH=150 HEIGHT=150></APPLET> 

現在它工作,它將顯示一個警報窗口。

所以,我的問題是爲什麼當我指定代碼庫時它沒有工作?根據Java文檔,如果類文件位於不同的目錄中,則可以通過代碼庫來告訴它,該小程序將顯示出來,但如果鍵入某些文本並單擊該按鈕,則什麼都不會發生,我嘗試了不同的方式來指定代碼庫:

<APPLET CODEBASE="file:///C:/Dir_Fit/build/classes/" CODE="Javascript_Java_Interaction_Demo.class" WIDTH=150 HEIGHT=150></APPLET> 

    <APPLET CODEBASE="C:/Dir_Fit/build/classes/" CODE="Javascript_Java_Interaction_Demo.class" WIDTH=150 HEIGHT=150></APPLET> 

    <APPLET CODEBASE="build/classes/" CODE="Javascript_Java_Interaction_Demo.class" WIDTH=150 HEIGHT=150></APPLET> 

<APPLET CODE="C:/Dir_Fit/build/classes/Javascript_Java_Interaction_Demo.class" WIDTH=150 HEIGHT=150></APPLET> 

然而,它們都沒有工作,爲什麼?我不希望類文件與htmls處於相同的目錄中。什麼是修復?

弗蘭克

回答

0

它可能有一些與我的小程序啓動失敗,ClassNotFoundExceptions獨立於瀏覽器的Java 6中更新10由發行後的變化 - 他們怪異與6u7工作之前。首先,我想到了一個混亂的安裝或配置,但其他人在他們的系統中經歷了同樣的事情。

我的試錯法得出的結果與您的觀察結果相同,即如果我指定了一個空的codebase屬性,則說明我的小程序失敗。

谷歌搜索(今天)沒有拿出任何有意義的結果或錯誤報告發布。我猜想代碼庫屬性用法的規則在版本之間改變了 - 也許舊的規則不夠嚴格或者不符合某些規範。