답변:
앱이 모든 기본 앱처럼 작동하도록하는 java-gnome (java gtk 래퍼) 이라는 라이브러리 가 있습니다. 기본 위젯, 글로벌 메뉴 등 모든 영광을 제공합니다.
라이브러리는 우분투 리포지토리에서 사용할 수 있습니다.
라이브러리의 목표는 풍부한 Java + Gnome 경험을 개발하는 것입니다. 이 라이브러리를 사용하면 앱이 Java의 멀티 플랫폼 기능을 잃게됩니다 (java-gnome에 연결되므로).
다음은 메뉴 통합을 표시하는 샘플 앱 (java-gnome과 함께 제공됨)입니다.
Ayatana를 사용해보십시오. 여기에서 지침을 찾을 수 있습니다 : http://hanynowsky.wordpress.com/2012/05/12/integration-of-java-swing-applications-with-unity-global-menu-in-ubuntu-12-04/
Java Ayatana 라이브러리를 가져 와서 기본 JFrame 클래스에서 호출하기 만하면됩니다. 이것은 실제로 코드에 다음 두 줄을 추가하고 Ayatana 클래스를 가져 오는 것을 의미합니다.
if (AyatanaDesktop.isSupported())
ApplicationMenu.tryInstall(mainFrame);
예를 들면 다음과 같습니다.
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import org.java.ayatana.ApplicationMenu;
import org.java.ayatana.AyatanaDesktop;
public class MyAppWithUnityMenu {
public MyAppWithUnityMenu () {
JFrame mainFrame = new JFrame("This app integrates in Unity menu bar");
// set up mainFrame, by adding components, etc.
JPanel panel = new JPanel();
panel.add(new JLabel("This is a sample application for testing menu integration in Unity. Enjoy!"));
mainFrame.getContentPane().add(panel);
mainFrame.addWindowListener ( new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// set up the menu bar, by adding menus, etc.
JMenuBar menuBar = new JMenuBar();
JMenu file = new JMenu("File");
file.add(new JMenuItem("Open"));
file.add(new JMenuItem("Save"));
file.add(new JMenuItem("Close"));
JMenu edit = new JMenu("Edit");
edit.add(new JMenuItem("Copy"));
edit.add(new JMenuItem("Cut"));
edit.add(new JMenuItem("Paste"));
JMenu help = new JMenu("Help");
help.add(new JMenuItem("Help topics"));
help.add(new JMenuItem("About"));
menuBar.add(file);
menuBar.add(edit);
menuBar.add(help);
menuBar.setVisible(true);
mainFrame.setJMenuBar(menuBar);
mainFrame.pack();
mainFrame.setVisible(true);
// Java Ayatana Call
if (AyatanaDesktop.isSupported()) {
ApplicationMenu.tryInstall(mainFrame);
}
}
public static void main(String[] args) {
new MyAppWithUnityMenu();
}
}
그리고 가장 중요한 것은 응용 프로그램이 여전히 크로스 플랫폼이라는 것입니다. Ubuntu 12.04 LTS와 Windows XP에서 위 예제를 테스트했습니다.
ppa를 사용할 수 있습니다 : ppa : danjaredg / jayatana
http://www.webupd8.org/2014/02/get-unity-global-menu-hud-support-for.html
이는 일반적으로 GTK 또는 Qt와 같은 툴킷 수준에서 수행됩니다. 따라서 의도 한 방법은 사용중인 GUI 툴킷 인 경우 Swing을 패치하는 것입니다. 그러나 모든 Unity 구성 요소는 DBus를 사용하여 통신하므로 원하는 경우 DBus API를 직접 구현하여 직접 수행 할 수 있습니다. 이 작업을 수행하려면 libdbusmenu를보고 작동 방식을 확인하십시오.
당신을위한 해결책은 아니지만 참고로 : 스윙 메뉴가 (반) 자동으로 글로벌 메뉴에 통합되지 않았다는 사실을 추적하기 위해 우분투 버그 # 984916 을 제출했습니다 .