2014-11-03 4 views
0

Java FX를 배우려고했기 때문에 Oracle Eample Code를 사용했지만 Netbean IDE에서 실행하려고하면 런타임 오류가 발생합니다. 다음은 코드 조각입니다.Java 런타임 예외. Java FX

public class WebViewTestOne { 
    private Scene scene; 
    @Override 
    public void start(Stage stage) { 
    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); 

    } 
           } 

및 예외입니다.

Exception in thread "main" java.lang.RuntimeException: Error: class webviewtest.one.WebViewTestOne is not a subclass of javafx.application.Application 
at javafx.application.Application.launch(Application.java:254) 
at webviewtest.one.WebViewTestOne.main(WebViewTestOne.java:33) 
Java Result: 1 

그래서 무엇이 잘못 되었나요? 이것은 공식 사이트의 예이기 때문에 오류가있는 이유는 무엇입니까? , 지금은 내가 확장을 시도 후에도 더 많은 예외를 제공 좋아 내가 예에서 놓친 확장을 추가 강탈하여 답변에 따라 : (오류가 (인수)

편집 발사에서 발생 .. 아래의 코드는

package webviewtest.one; 
    import javafx.application.Application; 
    import static javafx.application.Application.launch; 
    import javafx.application.Platform; 
    import javafx.beans.value.ChangeListener; 
    import javafx.beans.value.ObservableValue; 
    import javafx.collections.ListChangeListener.Change; 
    import javafx.concurrent.Worker.State; 
    import javafx.event.ActionEvent; 
    import javafx.event.Event; 
    import javafx.event.EventHandler; 
    import javafx.geometry.HPos; 
    import javafx.geometry.Pos; 
    import javafx.geometry.VPos; 
    import javafx.scene.Node; 
    import javafx.scene.Scene; 
    import javafx.scene.control.Button; 
    import javafx.scene.control.ComboBox; 
    import javafx.scene.control.Hyperlink; 
    import javafx.scene.image.Image; 
    import javafx.scene.image.ImageView; 
    import javafx.scene.layout.HBox; 
    import javafx.scene.layout.Priority; 

    import javafx.scene.layout.Region; 
    import javafx.scene.paint.Color; 
    import javafx.scene.web.PopupFeatures; 
    import javafx.scene.web.WebEngine; 
    import javafx.scene.web.WebHistory; 
    import javafx.scene.web.WebHistory.Entry; 
    import javafx.scene.web.WebView; 
    import javafx.stage.Stage; 
    import netscape.javascript.JSObject; 

public class WebViewTestOne extends Application{ 

    private Scene scene; 

    @Override 
    public void start(Stage stage) { 
     // create scene 
     stage.setTitle("Web View"); 
     scene = new Scene(new Browser(), 750, 500, Color.web("#666970")); 
     stage.setScene(scene); 
     // apply CSS style 
     scene.getStylesheets().add("webviewsample/BrowserToolbar.css"); 
     // show stage 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 

    } 
} 
class Browser extends Region { 

    private HBox toolBar; 
    private static String[] imageFiles = new String[]{ 
     "product.png", 
     "blog.png", 
     "documentation.png", 
     "partners.png", 
     "help.png" 
    }; 
    private static String[] captions = new String[]{ 
     "Products", 
     "Blogs", 
     "Documentation", 
     "Partners", 
     "Help" 
    }; 
    private static String[] urls = new String[]{ 
     "http://www.oracle.com/products/index.html", 
     "http://blogs.oracle.com/", 
     "http://docs.oracle.com/javase/index.html", 
     "http://www.oracle.com/partners/index.html", 
     // WebViewSample.class.getResource("help.html").toExternalForm() 
    }; 
    final ImageView selectedImage = new ImageView(); 
    final Hyperlink[] hpls = new Hyperlink[captions.length]; 
    final Image[] images = new Image[imageFiles.length]; 
    final WebView browser = new WebView(); 
    final WebEngine webEngine = browser.getEngine(); 
    final Button showPrevDoc = new Button("Toggle Previous Docs"); 
    final WebView smallView = new WebView(); 
    final ComboBox comboBox = new ComboBox(); 
    private boolean needDocumentationButton = false; 

    public Browser() { 
     //apply the styles 
     getStyleClass().add("browser"); 

     for (int i = 0; i < captions.length; i++) { 
      // create hyperlinks 
      Hyperlink hpl = hpls[i] = new Hyperlink(captions[i]); 
      Image image = images[i] = 
      new Image(getClass().getResourceAsStream(imageFiles[i])); 
      hpl.setGraphic(new ImageView(image)); 
      final String url = urls[i]; 
      final boolean addButton = (hpl.getText().equals("Documentation")); 

      // process event 
      hpl.setOnAction(new EventHandler<ActionEvent>() { 
       @Override 
       public void handle(ActionEvent e) { 
        needDocumentationButton = addButton; 
        webEngine.load(url); 
       } 
      }); 
     } 

     comboBox.setPrefWidth(60); 

     // create the toolbar 
     toolBar = new HBox(); 
     toolBar.setAlignment(Pos.CENTER); 
     toolBar.getStyleClass().add("browser-toolbar"); 
     toolBar.getChildren().add(comboBox); 
     toolBar.getChildren().addAll(hpls); 
     toolBar.getChildren().add(createSpacer()); 

     //set action for the button 
     showPrevDoc.setOnAction(new EventHandler() { 
      @Override 
      public void handle(Event t) { 
       webEngine.executeScript("toggleDisplay('PrevRel')"); 
      }   
     }); 

     smallView.setPrefSize(120, 80); 

     //handle popup windows 
     webEngine.setCreatePopupHandler((PopupFeatures config) -> { 
      smallView.setFontScale(0.8); 
      if (!toolBar.getChildren().contains(smallView)) { 
       toolBar.getChildren().add(smallView); 
      } 
      return smallView.getEngine(); 
     }); 

     //process history 
     final WebHistory history = webEngine.getHistory(); 
     history.getEntries().addListener((Change<? extends Entry> c) -> { 
      c.next(); 
      c.getRemoved().stream().forEach((e) -> { 
       comboBox.getItems().remove(e.getUrl()); 
      }); 
      c.getAddedSubList().stream().forEach((e) -> { 
       comboBox.getItems().add(e.getUrl()); 
      }); 
     }); 

     //set the behavior for the history combobox    
     comboBox.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent ev) { 
       int offset = 
         comboBox.getSelectionModel().getSelectedIndex() 
         - history.getCurrentIndex(); 
       history.go(offset); 
      } 
     }); 


     // process page loading 
     webEngine.getLoadWorker().stateProperty().addListener(
      new ChangeListener<State>() { 
       @Override 
       public void changed(ObservableValue<? extends State> ov, 
        State oldState, State newState) { 
        toolBar.getChildren().remove(showPrevDoc);  
        if (newState == State.SUCCEEDED) { 
          JSObject win = 
           (JSObject) webEngine.executeScript("window"); 
          win.setMember("app", new JavaApp()); 
          if (needDocumentationButton) { 
           toolBar.getChildren().add(showPrevDoc); 
          } 
         } 
        } 
       } 
     ); 

     // load the home page   
     webEngine.load("http://www.oracle.com/products/index.html"); 

     //add components 
     getChildren().add(toolBar); 
     getChildren().add(browser); 
    } 

    // JavaScript interface object 
    public class JavaApp { 

     public void exit() { 
      Platform.exit(); 
     } 
    } 

    private Node createSpacer() { 
     Region spacer = new Region(); 
     HBox.setHgrow(spacer, Priority.ALWAYS); 
     return spacer; 
    } 

    @Override 
    protected void layoutChildren() { 
     double w = getWidth(); 
     double h = getHeight(); 
     double tbHeight = toolBar.prefHeight(w); 
     layoutInArea(browser,0,0,w,h-tbHeight,0,HPos.CENTER,VPos.CENTER); 
     layoutInArea(toolBar,0,h-tbHeight,w,tbHeight,0,HPos.CENTER,VPos.CENTER); 
    } 

    @Override 
    protected double computePrefWidth(double height) { 
     return 750; 
    } 

    @Override 
    protected double computePrefHeight(double width) { 
     return 600; 
    } 
} 

예외에 대한 새로운 코드 및 로그이며,이 예외 로그입니다.

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483) 
at  com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:363) 
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:303) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at  sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:483)  
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875) 
at  com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157) 
at com.sun.javafx.application.LauncherImpl$$Lambda$48/128893786.run(Unknown Source) 
at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.NullPointerException: Input stream must not be null 
at javafx.scene.image.Image.validateInputStream(Image.java:1099) 
at javafx.scene.image.Image.<init>(Image.java:684) 
at webviewtest.one.Browser.<init>(WebViewTestOne.java:104) 
at webviewtest.one.WebViewTestOne.start(WebViewTestOne.java:49) 
at  com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(LauncherImpl.java:821)  
at com.sun.javafx.application.LauncherImpl$$Lambda$51/1135703189.run(Unknown Source) 
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(PlatformImpl.java:323) 
at com.sun.javafx.application.PlatformImpl$$Lambda$45/1051754451.run(Unknown Source) 
at com.sun.javafx.application.PlatformImpl.lambda$null$164(PlatformImpl.java:292) 
at com.sun.javafx.application.PlatformImpl$$Lambda$47/135339377.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(PlatformImpl.java:291) 
at com.sun.javafx.application.PlatformImpl$$Lambda$46/1775282465.run(Unknown Source) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$141(WinApplication.java:102) 
at com.sun.glass.ui.win.WinApplication$$Lambda$37/1109371569.run(Unknown Source) 
... 1 more 
Exception running application webviewtest.one.WebViewTestOne 
Java Result: 1 

답변

0

당신은 응용 프로그램을 확장해야 내가 믿는 그것이 오류의 의미입니다.

import javafx.application.Application; 
    import javafx.scene.Group; 
    import javafx.scene.Scene; 
    import javafx.scene.shape.Circle; 
    import javafx.stage.Stage; 

public class MyApp extends Application 
{ 
    public void start(Stage stage) 
    { 
     Circle circ = new Circle(40, 40, 30); 
     Group root = new Group(circ); 
     Scene scene = new Scene(root, 400, 300); 

     stage.setTitle("My JavaFX Application"); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 
+0

응용 프로그램을 확장하고 그것을 시도 : 여기

자바 FX 사이트에서 예입니다. 동일한 코드의 예제 5가 응용 프로그램을 확장하므로 모든 것을 올바르게 복사했는지 확인하십시오. –

+0

편집부를 살펴보십시오. – lonesome

+0

CSS 파일이 있습니까? 마치 add 메소드 내부에서 던져지고있는 것처럼 보입니다. 그것으로 인한 원인 : java.lang.NullPointerException : 입력 스트림이 null이되어서는 안됩니다 –