2009-06-12 10 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> 

しかし、いずれも機能しません、なぜですか?私はクラスファイルがhtmlと同じディレクトリにあることを望んでいません。修正は何ですか?

フランク

答えて

0

それは私のアプレットがブラウザに依存しないにClassNotFoundExceptionsで失敗し始めリリース後のアップデート10のJava 6で行われた変更とは何かを持っているかもしれません - 不思議な彼らが、その前に6u7で働いていました。最初に私は割れた割賦や構成について考えましたが、他の人たちはシステムで同じことを経験しました。

私の試行錯誤は、観測と同じ結果、つまり空のcodebase属性を指定しても、私のアプレットは失敗します。

グーグル(今日)では、意味のある結果やバグレポートが発行されません。バージョン間でコードベース属性の使用法のルールが変更されたと思います。古いものは十分に制限されていないか、一部の仕様に準拠していなかった可能性があります。