JavaFX에 대해 더 알고 싶습니다. 그래서 Webview를 설정하려고했습니다. Oracle 웹 사이트에서 webview 예제를 복사하고 Upcall 기능을 추가했습니다. 하지만 작동하지 않습니다. 사실 Webview에서 웹 사이트를 디버깅하는 방법을 모르겠습니다.자바 스크립트를 JavaFX로 업 그레 이브
package boersensim;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class Main extends Application {
private Scene scene;
@Override public void start(Stage stage) {
// create the scene
stage.setTitle("Web View");
scene = new Scene(new Browser(),750,500, Color.web("#666970"));
stage.setScene(scene);
//scene.getStylesheets().add("webviewsample/BrowserToolbar.css");
stage.show();
}
public static void main(String[] args){
launch(args);
}
}
class Browser extends Region {
final WebView browser = new WebView();
final WebEngine webEngine = browser.getEngine();
public Browser() {
//apply the styles
getStyleClass().add("browser");
// load the web page
webEngine.load("test.html");
//add the web view to the scene
getChildren().add(browser);
JSObject jsobj = (JSObject) webEngine.executeScript("window");
jsobj.setMember("java", new Bridge());
}
private Node createSpacer() {
Region spacer = new Region();
HBox.setHgrow(spacer, Priority.ALWAYS);
return spacer;
}
@Override protected void layoutChildren() {
double w = getWidth();
double h = getHeight();
layoutInArea(browser,0,0,w,h,0, HPos.CENTER, VPos.CENTER);
}
@Override protected double computePrefWidth(double height) {
return 750;
}
@Override protected double computePrefHeight(double width) {
return 500;
}
}
class Bridge {
public void exit() {
//Platform.exit();
System.out.print("Hello!UPCALL");
}
}
corrosponding의 HTML은 다음과 같습니다 :
Click<a href="#" onclick="java.exit();">here</a>to exit the application
나는 링크 아무 일도 발생하지 클릭하면 그래서 여기에 자바 코드입니다. 사전에 당신에게
감사합니다, 다니엘
나는이 응답을 3 시간 전에 보았습니다! * public * 수정자를 사용하지 않고 정적 내부 클래스 *를 가졌으며 JVM이 충돌합니다. 클래스에 'public'을 추가하면 이제 작동합니다. 고맙습니다! – metasim