2017-02-10 58 views
0

我試圖使用https://github.com/codecentric/NSMenuFX中的NSMenuFX來使JavaFX應用程序使用MacOS系統MenuBar,並且因爲此方法始終返回false,所以它不起作用。OSX系統菜單欄不能在JavaFX中工作

Toolkit.getToolkit().getSystemMenu().isSupported() 

該方法來自包裝:com.sun.javafx.tk.Toolkit

更深入的代碼我發現Toolkit.getToolkit().getSystemMenu().isSupported()調用的方法從com.sun.glass.ui.Application總是返回false。

protected boolean _supportsSystemMenu() { 
    return false; 
} 

public final boolean supportsSystemMenu() { 
    checkEventThread(); 
    return this._supportsSystemMenu(); 
} 

這段代碼有什麼問題嗎?我怎樣才能使用System菜單欄獲取JavaFX應用程序。

注意:在OSX 10.12.3上使用的JDK是8u121。

編輯1:如評論中所建議的,這是一些代碼。

import javafx.scene.control.MenuBar; 

public class MyappMenuBar extends MenuBar { 
// member variables ------------------------------------------------------------------------- 
    private final MyappPane mmyappPane; 
    public MyappPane getMyappPane() {return mMyappPane;} 
    private final MyappHelpMenu mHelpMenu; 
    public MyappHelpMenu getHelpMenu() {return mHelpMenu;} 

// constructors ----------------------------------------------------------------------------- 
    public myappMenuBar(MyappPane pMyappPane) { 
     mMyappPane = pMyappPane; 
     setUseSystemMenuBar(true); 
     mHelpMenu = new MyappHelpMenu(pMyappPane); 
     getMenus().add(mHelpMenu); 
    } 
} 
+1

是否有使用外部庫的理由?不使用常規JavaFX'MenuBar'並調用['setUseSystemMenuBar(true)'](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/MenuBar.html#setUseSystemMenuBar -boolean-)工作? –

+0

@James_D實際上它沒有,「setUseSystemMenuBar(true)」沒有效果。 – josephino

+0

它適合我。如果它不工作,你可能做錯了什麼...發佈一些代碼。 –

回答

1

的問題是由閃屏引起的(Java的-splash:../ img.png),因爲它是一個AWT的功能,而不是一個JavaFX功能,似乎沒有任何幫助結合AWT和JavaFX線程在一個單獨的線程和-Djavafx.embed.singleThread=true一起似乎不起作用。

現在我只是禁用了啓動畫面,我打算在應用程序中將其作爲JavaFX窗格實現。