2015-01-21 28 views
2

問題JavaFX的:從主比

我可以調用'Application.launch(參數)以外的方法調用 'Application.launch(參數)'; '從主要以外的方法?如果可以的話,請記住下面的情況來舉一個例子嗎?

背景

我建立學習/教學,指揮/文本應用程序,講授陣列用戶。在主類的末尾,在主要應用程序內容運行後,我調用'ViewSiteOrExit.viewSitePromptPuSVM(); ',這會讓用戶反對:打開陣列上的Oracle頁面或退出遊戲。

如果用戶希望查看Oracle頁面,我調用'OpenSite。(?)? ',它將在FX VBox中打開頁面。如果沒有,退出。

這是我第一次使用FX,而且我很累,所以對我的代碼的任何觀察和建議都會有幫助,因爲我可能會錯過一些東西。

但我的主要問題是,我應該怎麼稱呼'OpenSite。??????????(); ',該方法包含'Application.launch(args);,如果不是從我的main?

如果它必須從main調用,那麼只有當應用程序的主要部分已經運行並且僅當用戶輸入'y'後,我該如何做?

下面是提示用戶查看站點或退出遊戲的.java,以及打開頁面的.jave。

package mrArray; 

import javafx.application.Application; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.layout.VBox; 
import javafx.scene.web.WebEngine; 
import javafx.scene.web.WebView; 
import javafx.stage.Stage; 

public class OpenSite extends Application 
{ 
    VBox vBoxOF = new VBox(); 

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

    @Override 
    public void start(Stage primaryStage) 
    { 
    vBoxOF.setId("root"); 

    WebView webViewBrowserOL = new WebView(); 
    WebEngine webEngineOL = webViewBrowserOL.getEngine(); 
    String urlSL = "http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html"; 
    webEngineOL.load(urlSL); 

    vBoxOF.setPadding(new Insets(30, 50, 50, 50)); 
    vBoxOF.setSpacing(10); 
    vBoxOF.setAlignment(Pos.CENTER); 
    vBoxOF.getChildren().addAll(webViewBrowserOL); 

    Scene sceneOL = new Scene(vBoxOF); 
    primaryStage.setScene(sceneOL); 
    primaryStage.show(); 
    } 
} 

二等

package mrArray; 


public class ViewSiteOrExit 
{ 
    /* 
    * declare fields, 
    */ 
    private static int statePrSIF; 
    private static String enterYOrNPrSSOF; 

    /* 
    * declare method, 
    * initialize field, 
    * while, test(field) is passing execute, 
    * switch, evaluates cases with value(field), 
    * matching, execute statements, 
    * 0, first case, prompt, y drop to if, reset value, use app again, 
    * n drop to else, increment field, 1, second case, 
    * invoke method to close app, reset field value to prevent double field invocation, 
    * return flow to caller to prevent use of closing Scanner, 
    */ 
    public static void viewSitePromptPuSVM() 
    { 
     statePrSIF = 0; 
     while (statePrSIF < 2) 
     { 
      switch (statePrSIF) 
      { 
       case 0: 
        System.out.println(); 
        System.out.println("[:-)] One more question?"); 
        System.out.println("Would you like to see what Oracle has to say about me?"); 
        System.out.println("Enter ' y ' for yes."); 
        System.out.println("Enter ' n ' for no."); 
        break; 
       case 1: 
        goodByePuSVM(); 
        statePrSIF = 0; 
        return; 
      } 

      enterYOrNPrSSOF = MrArray.scannerOF.next(); 

      if(enterYOrNPrSSOF.equalsIgnoreCase("y")) 
      { 
       statePrSIF = 0; 
       System.out.println("[:-)] Well bud, it's been fun."); 
       System.out.println("Here is that Orcale thing."); 
       System.out.println("See ya later!"); 
       OpenSite.??????????(); 
      } 
      else if(enterYOrNPrSSOF.equalsIgnoreCase("n")) 
      { 
       statePrSIF++; 
      } 
     } 
    } 

    /* 
     * declare method, 
     * invoke methods, display output, 
     * close Scanner, terminate, 
     */ 
    public static void goodByePuSVM() 
    { 
      System.out.println("[:-)] Well bud, it's been fun."); 
      System.out.println("See ya later!"); 

      MrArray.scannerOF.close(); 
    } 
} 
+1

如果你只是想給學生顯示一個網頁,在默認瀏覽器中使用java.awt.Desktop類打開該網頁可能會更容易,而不是自己編寫一個GUI。 https://docs.oracle.com/javase/8/docs/api/java/awt/Desktop.html – Puce 2015-01-21 12:45:20

回答

1

你需要調用它擴展應用程序類的靜態方法。您可以從任何地方撥打電話,但不必強制撥打main()。使用以下內容:

OpenSite.launch(OpenSite.class);

有關JavaFX應用程序如何工作的背景知識,請通過Application JavaDoc。它寫得非常好,並且對JavaFX應用程序的觸發方式提出了很多見解。

你也可以去通過下面的答案

Starting JavaFX from Main method of class which doesn't extend Application

注意

  • 這就要求Application.launch(),並啓動primary Stage線程將不會返回,除非舞臺已關閉。
  • 請確保您撥打電話launch()只需一次
+0

是的,它會的。請通過我的編輯。 – ItachiUchiha 2015-01-21 08:43:52

+0

我會和我會的。我假設我可以打電話:OpenSite.launch(OpenSite.class);從任何地方/任何方法,具有相同的結果?我實現了你建議的新調用,這是一個大型應用程序,因此它需要一分鐘,但它正在運行/我現在正在測試它。 – ReedWilliams19842004 2015-01-21 08:45:45

+0

你可以使用[CodeReview](http://codereview.stackexchange.com/) – ItachiUchiha 2015-01-21 08:49:17