2017-02-27 173 views
0

缺少我创建了一个Hello World应用程序在JavaFX和我将使用两种QuitHandler和AboutHandler,我注意到,“关于”和“首选项”菜单项目未在菜单中显示:JavaFX的:“关于”菜单项,从“应用程序菜单”在OSX

enter image description here

我怎样才能使它看起来像:

enter image description here

此外,QuitHandler不执行查询保存行为,这里是鳕鱼e javaFX Hello World。

package helloworld; 

import com.apple.eawt.AppEvent; 
import com.apple.eawt.QuitResponse; 

import java.security.AccessControlException; 
import java.util.Optional; 

import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.scene.Scene; 
import javafx.scene.control.Alert; 
import javafx.scene.control.ButtonType; 
import javafx.scene.control.Menu; 
import javafx.scene.control.MenuBar; 
import javafx.scene.control.MenuItem; 
import javafx.scene.control.SeparatorMenuItem; 
import javafx.scene.control.TextArea; 
import javafx.scene.layout.BorderPane; 
import javafx.stage.Stage; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.Logger; 

/** 
* Sample application. 
* @author me 
*/ 
public class HelloWorldApplication extends Application { 
// constants -------------------------------------------------------------------------------- 
    private static final Logger LOG = LogManager.getLogger(); 

    /** 
    * Running on Mac platform. 
    */ 
    public static final boolean MAC; 

    static { 
     boolean mac = false; 
     try { 
     final String osName = System.getProperty("os.name"); 
     LOG.debug("OS: {}", osName); 
     mac = osName != null && osName.toLowerCase().contains("mac"); 
     } catch (AccessControlException ex) { 
     LOG.debug("Cannot determine OS"); 
     } 
     MAC = mac; 
    } 

// member variables ------------------------------------------------------------------------- 
    private final Alert mAlert = new Alert(Alert.AlertType.CONFIRMATION); 

// methods ---------------------------------------------------------------------------------- 
    @Override 
    public void start(Stage pStage) { 
     final BorderPane root = new BorderPane(); 

     final MenuBar menuBar = new MenuBar(); 

     final Menu fileMenu = new Menu("_File"); 
     menuBar.getMenus().add(fileMenu); 

     // Exit 
     boolean macQuitMenuItem = false; 
     if (MAC) { 
     final com.apple.eawt.Application application = com.apple.eawt.Application.getApplication(); 
     try { 
      application.setQuitHandler(
       (AppEvent.QuitEvent pEvt, QuitResponse pQuitResponse) -> Platform.runLater(
       () -> exit(pQuitResponse::cancelQuit) 
       ) 
      ); 
      macQuitMenuItem = true; 

      // occurs when running as untrusted applet 
     } catch (AccessControlException ex) { 
      LOG.debug("Cannot listen for application quit"); 
     } 
     } 
     if (!macQuitMenuItem) { 
     fileMenu.getItems().add(new SeparatorMenuItem()); 

     final MenuItem exitMenuItem = new MenuItem("E_xit"); 

     exitMenuItem.setOnAction(pEvt -> exit(() -> {})); 
     fileMenu.getItems().add(exitMenuItem); 
     } 


     root.setTop(menuBar); 
     root.setCenter(new TextArea("Hello, world!")); 

     final Scene scene = new Scene(root, 300, 250); 

     pStage.setTitle("Hello World!"); 
     pStage.setScene(scene); 

     mAlert.initOwner(pStage); 
     mAlert.setTitle("Confirm Exit"); 
     mAlert.setHeaderText("Look, a Confirmation Dialog"); 
     mAlert.setContentText("Are you sure you want to exit?"); 

     pStage.show(); 
    } 

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

    public void exit() {exit(() -> {});} 

    public void exit(Runnable pAbortExitRunnable) { 
     LOG.info("Exit"); 
     if (checkUnsavedChanges()) { 
     Platform.exit(); 
     } else { 
     pAbortExitRunnable.run(); 
     } 
    } 

    private boolean checkUnsavedChanges() { 
     final Optional<ButtonType> result = mAlert.showAndWait(); 
     return result.isPresent() && result.get() == ButtonType.OK; 
    } 
} 

我想知道什么是错的代码?

编辑1:pom.xml的编译和测试此代码。

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>app</groupId> 
    <artifactId>helloworld</artifactId> 
    <version>1.0-SNAPSHOT</version> 

    <dependencies> 
     <dependency> 
      <groupId>com.yuvimasory</groupId> 
      <artifactId>orange-extensions</artifactId> 
      <version>1.3.0</version> 
     </dependency> 

     <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-api</artifactId> 
      <version>2.8</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.logging.log4j</groupId> 
      <artifactId>log4j-core</artifactId> 
      <version>2.8</version> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>3.0.0</version> 
       <executions> 
        <execution> 
         <id>copy-dependencies</id> 
         <phase>initialize</phase> 
         <goals> 
          <goal>copy-dependencies</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>3.0.2</version> 
       <configuration> 
        <archive> 
         <index>true</index> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <mainClass>helloworld.HelloWorldApplication</mainClass> 
         </manifest> 
        </archive> 

       </configuration> 

      </plugin> 
     </plugins> 
    </build> 
</project> 
+1

除了你的问题:有没有需要测试的应用程序的操作系统您正在运行这一点,com.apple *类将不提供其他任何平台和您的应用程序将失败,并出现ClassDefNotFound异常。 –

+0

@ user1993392我说我的pom.xml编译和测试(请参阅编辑1),可随时再次测试。 – josephino

回答

相关问题