2016-03-23 10 views
3
import com.teamdev.jxbrowser.chromium.Browser; 
import com.teamdev.jxbrowser.chromium.BrowserFunction; 
import com.teamdev.jxbrowser.chromium.JSValue; 
import com.teamdev.jxbrowser.chromium.LoggerProvider; 
import com.teamdev.jxbrowser.chromium.swing.BrowserView; 

import javax.swing.*; 
import java.awt.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class JavaScriptJavaSample { 
    public static void main(String[] args) { 
    LoggerProvider.setLevel(Level.OFF); 
    Browser browser = new Browser(); 
    BrowserView browserView = new BrowserView(browser); 

    browser.registerFunction("MyFunction", new BrowserFunction() { 
     public JSValue invoke(JSValue... args) { 
      System.out.println("MyFunction is invoked!"); 
      return JSValue.create("Hello!"); 
     } 
    }); 

    JFrame frame = new JFrame(); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    frame.add(browserView, BorderLayout.CENTER); 
    frame.setSize(700, 500); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

    browser.loadHTML("<html><body><a href='#' onclick='MyFunction();'>Call Java method</a></body></html>"); 
} 
} 

すべてのjarファイルを追加しましたが、BrowserFunctionは存在しません、なぜですか?jxBrowserエラークラスが存在しません

他のすべてのクラスが完璧に動作し、問題を理解していない、私

関数を登録するBrowserFunction()を使用して、私の知る限りでは、事前

答えて

2

内のすべてのすべてのjar感謝をインポートし、新しい中に消えましたjxbrowserのバージョン。新しい方法がある6.1のバージョンhereが記載されています。あなたのコード内の新しい方法置く:

import com.teamdev.jxbrowser.chromium.Browser; 
import com.teamdev.jxbrowser.chromium.BrowserFunction; 
import com.teamdev.jxbrowser.chromium.JSValue; 
import com.teamdev.jxbrowser.chromium.LoggerProvider; 
import com.teamdev.jxbrowser.chromium.swing.BrowserView; 

import javax.swing.*; 
import java.awt.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class JavaScriptJavaSample { 
    public static void main(String[] args) { 
     LoggerProvider.setLevel(Level.OFF); 
     Browser browser = new Browser(); 
     BrowserView browserView = new BrowserView(browser); 

     browser.addLoadListener(new LoadAdapter() { 
      @Override 
      public void onFinishLoadingFrame(FinishLoadingEvent event) { 
       if (event.isMainFrame()) { 
        Browser browser = event.getBrowser(); 
        JSValue value = browser.executeJavaScriptAndReturnValue("window"); 
        value.asObject().setProperty("java", new Events()); 
       } 
      } 
     }); 

     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
     frame.add(browserView, BorderLayout.CENTER); 
     frame.setSize(700, 500); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

     browser.loadHTML("<html><body><a href='#' onclick='alert(java.MyFunction());return false;'>Call Java method</a></body></html>"); 
    } 
} 

Eventsクラス保持するために別のファイルを作成します。

public class Events { 

    public String MyFunction() { 

     System.out.println("MyFunction is invoked!"); 

     return new String("Hello"); 

    } 

} 

を*リンクhrefを次からブラウザを防止し、aタグのonclick属性の最後にreturn falseを追加しましたクリックで 最近、main documentationコードを使用することをお勧めします。

+0

コードが機能します!どうもありがとう! –

+0

はJxBrowserの_LoadAdapter_部分ですか?それとも自分が書いたクラスですか? –

+0

jxbrowserの一部です –

0

BrowserFunctionを使用するには、licence.jarがあり、クラスパスに追加する必要があります。
JxBrowserには無料の30日間の試用版があります。ライセンスを購入することもできます。

関連する問題