 //if (exec->argumentCount() == 1) {
 // String string = exec->argument(0).toString(exec)->value(exec);
 // jint n = env->GetArrayLength(jMimes);
 //                  for (jint j=0; j<n; j++) {
 //                      jstring jstrMime = (jstring)env->GetObjectArrayElement(jMimes, j);  

package test;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.concurrent.Worker.State;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;

public class WebViewUpCallsDemo extends Application {
 
    private DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
 
    private Label label;
	interface lll {
	};
	interface XXX {
		public void moXX();
    }
	interface YYY {
		public void moYY();
	}
	interface ZZZ {
		public void moZZ();
	}
	class ClassA implements XXX {
		public void show(){
			   System.out.println("func ");
			}
		public void moXX() {
			}
		}
	class ClassC  extends ClassA implements YYY, ZZZ {
		public void show(){
			   System.out.println("func classC ");
			}
		public void moYY() {
			}
		public void moZZ() {
			}
		}
		class ClassD extends ClassC implements YYY, ZZZ, XXX{
		public void show(){
			   System.out.println("func classD ");
			}
		public void moXX() {
			}
		public void moZZ() {
			}
		public void moYY() {
			}
		}
 
 // A Bridge class and must a public class
    public class Bridge {
	   
		public ClassA obj;
		Bridge(){
			obj = new ClassD();
			}
	    public void func(int x) {
		       label.setText("Now is: " + df.format(new Date()));
			    System.out.println("func " + x);
		}
		
		public void func(float xx, float x , String yy, int yyi) {
		 label.setText("func ffsi " + df.format(new Date()));
	
		}
		public void func(double y , ClassD x, short hh, int uiui ) {
		 label.setText("func dDsi " + df.format(new Date()));
		   
		}
		
		public void func(int y , ClassC x, int ii, int ftft ) {
		 label.setText("func iCii " + df.format(new Date()));
	
		}
		
	
		public void func(Object x, ClassD xx, int xi, int kk) {
		 label.setText("func ODii " + df.format(new Date()));
	
		}
		public void func(Object x, ClassD xx , double xxx, int kk ) {
		 label.setText("func ODdi " + df.format(new Date()));
		
		}
		public void func(double x, ClassD xx, double xi, int ll) {
		 label.setText("func dDdi " + df.format(new Date()));
		
		}
		public void func(byte x, ClassC xx , double xxx, double uiu ) {
		 label.setText("func bCdd " + df.format(new Date()));
		   
		}
		
		public void func9(Object uiu ) {
		 label.setText("func9 O " + df.format(new Date()));
		}
		
		
		
		
		public void showTime(ClassD xx , int x, String y, int z) {
            label.setText("st DxSi");
            
        }
		public void showTime(ClassD xx, int x,String y, long z ) {
            label.setText("st DiSl");
            
        }
		
		public void showTime(ClassD xx, int x,int y, int z ) {
            label.setText("st Diii");
            
        }
	
    }
 
    // A HTML Content with a javascript function.
    private static String HTML_STRING = //
            "<html>"//
                    + "<head> " //
                    + "  <script language='javascript'> " //
                    + "     function callToJavaFX()  { "//
					+ "       var x = null;                    "//
                    + "       myJavaMember.showTime(myJavaMember.obj,1,\"test\", 1.1); " // myJavaMember.obj
                    + "     } " //
                    + "  </script> "//
                    + "</head> "//
                    + "<body> "//
                    + "   <h2>This is Html content</h2> "//
                    + "   <button onclick='callToJavaFX();'>Call To JavaFX</button> "//
                    + "</body> "//
                    + "</html> "//
    ;
 
    @Override
    public void start(final Stage stage) {
 
        label = new Label("-");
 
        final WebView browser = new WebView();
        final WebEngine webEngine = browser.getEngine();
 
        // Enable Javascript.
        webEngine.setJavaScriptEnabled(true);
 
        // A Worker load the page
        Worker<Void> worker = webEngine.getLoadWorker();
 
        // Listening to the status of worker
		Bridge bb = new Bridge();
        worker.stateProperty().addListener(new ChangeListener<State>() {
 
            @Override
            public void changed(ObservableValue<? extends State> observable, //
                    State oldValue, State newValue) {
 
                // When load successed.
                if (newValue == Worker.State.SUCCEEDED) {
                    // Get window object of page.
                    JSObject jsobj = (JSObject) webEngine.executeScript("window");
 
                    // Set member for 'window' object.
                    // In Javascript access: window.myJavaMember....
                    jsobj.setMember("myJavaMember", bb);
                }
            }
        });
 
        // Load HTML content.
        // Tải nội dung HTML
        webEngine.loadContent(HTML_STRING);
 
        VBox root = new VBox();
        root.setPadding(new Insets(5));
        root.setSpacing(5);
        root.getChildren().addAll(label, browser);
 
        Scene scene = new Scene(root);
 
        stage.setTitle("JavaFX WebView (o7planning.org)");
        stage.setScene(scene);
        stage.setWidth(450);
        stage.setHeight(300);
 
        stage.show();
    }
 
    public static void main(String[] args) {
        launch(args);
    }
	
}