2014-09-26 7 views
5

Okej, więc już wcześniej robiłem aplikacje Swing i wiem, czy chcesz wyświetlić inną nazwę menu aplikacji (tę na Macach, które zwykle mają "Preferencje" "i" Wyjdź "), musisz użyć: System.setProperty("com.apple.mrj.application.apple.menu.about.name", "App name"); i musi zostać wykonany przed utworzeniem JFrame. Zrobiłem to, ale nadal wyświetlałem nazwę mojej głównej klasy jako nazwę menu, tak jakbym nie napisał tego wiersza kodu w ogóle. Mam wpisane w Google hasło do tego problemu, ale nie mogłem znaleźć niczego przydatnego, a następnie po prostu szukałem tutaj, ale wszyscy, którzy mieli podobny problem, pracowali w Javie 1.5, 1.6 lub 1.7. Pomyślałem więc, że może to miało coś wspólnego z moją obecną wersją Java 1.8.Nazwa menu aplikacji Swing nie wyświetla się poprawnie w Javie 1.8

This, this i this nie działa. This, this i this albo wysłał mnie do nieaktualnych informacji, albo linki nie działały. Ponadto używam Mac 10.8.

Wszelkie sugestie/odpowiedzi byłyby bardzo mile widziane.

Aktualizacja:

tutaj jest kod I pierwotnie miał:

package bouncing_off_axes; 

/** 
* This is the driver class of this program. 
* 
* @author Mason 
* 
*/ 

public class Main { 

    /** 
    * The driving method. 
    * 
    * @param args 
    */ 

    public static void main(String[] args) { 

     System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Physics Engine Practice - Bouncing Balls"); 
     SimulationController view = new SimulationController("Test"); 

    } 

} 

I tu jest rozwiązanie, które trashgod warunkiem do kogoś innego:

package bouncing_off_axes; 

    import java.awt.Color; 
    import java.awt.Dimension; 
    import java.awt.EventQueue; 
    import javax.swing.BorderFactory; 
    import javax.swing.JFrame; 
    import javax.swing.JMenu; 
    import javax.swing.JMenuBar; 
    import javax.swing.JPanel; 

    /** @see https://stackoverflow.com/questions/8955638 */ 
    public class NewMain { 

     public static void main(String[] args) { 
      System.setProperty("apple.laf.useScreenMenuBar", "true"); 
      System.setProperty(
       "com.apple.mrj.application.apple.menu.about.name", "Name"); 
      EventQueue.invokeLater(new Runnable() { 

       @Override 
       public void run() { 

        JFrame frame = new JFrame("Gabby"); 
        final JPanel dm = new JPanel() { 

         @Override 
         public Dimension getPreferredSize() { 
          return new Dimension(320, 240); 
         } 
        }; 
        dm.setBorder(BorderFactory.createLineBorder(Color.blue, 10)); 

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.add(dm); 
        frame.pack(); 
        frame.setLocationByPlatform(true); 

        JMenuBar menuBar = new JMenuBar(); 
        JMenu fileMenu = new JMenu("File"); 
        menuBar.add(fileMenu); 
        frame.setJMenuBar(menuBar); 
        frame.setVisible(true); 
       } 
      }); 
     } 
    } 

I widocznie muszę 10 reputacja do publikowania zdjęć, więc nie mogę pokazać wyniku, ale nie wyszło.

+1

[To] (http://stackoverflow.com/a/11915509/230513) działa dla mnie na 10,9, Java 8. Dla bardziej konkretnej pomocy, proszę edytować swoje pytanie obejmują [zupełny przykład] (http://stackoverflow.com/help/mcve), który pokazuje problem, który opisujesz. – trashgod

+0

@trashgod Skopiowałem dosłownie rozwiązanie, które opublikowałeś [tutaj] (http://stackoverflow.com/questions/8955638/how-do-i-move-my-jmenubar-to-the-screen-menu-bar-on -mac-os-x/8956715 # 8956715). Jedyna różnica polega na tym, że mam klasę w pakiecie innym niż domyślny i mam w kodzie referencję 'package bouncing_off_axes'. Nie zadziałało, menu nadal wyświetlało nazwę klasy, a nie nazwę, która została ustawiona. Zmienię mój post i wstawię to, co pierwotnie miałem i przykład, który podałeś.Chciałbym również wprowadzić tę zmianę w kodzie, a nie w wierszu poleceń. – mistShaker

+1

AFAIK, podejście 'setProperty()' kończy się niepowodzeniem z językiem Java 8. Dlaczego nie dodać JAR do pakietu aplikacji, na [przykład] (http://stackoverflow.com/a/14485964/230513)? – trashgod

Odpowiedz

5

Korzystanie Java 8 na Mac OS X 10.9, ustawiając właściwość System

System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Name"); 

wydaje się być nieskuteczne w zmianę nazwy wyświetlanej w menu aplikacji. Alternatywy, które nadal pracują obejmują one:

  • Domyślnie menu aplikacji wyświetli prostą nazwę klasy podanej w wierszu poleceń java lub atrybutu manifestu słoika za Main-Class.

    java -cp build/classes mypackage.Name 
    java -jar dist/MyJar.jar 
    
  • użyć wiersza polecenia parametr -Xdock:name="Name".

    java -Xdock:name="Name" -cp build/classes mypackage.Main 
    java -Xdock:name="Name" -jar MyJar.jar 
    
  • Dodaj JAR aplikacji do aplikacji pakietu Mac, jak pokazano here An dodać atrybut do Info.plist.

    <key>JVMOptions</key> 
    <string>-Xdock:name=Name</string> 
    
+0

Dzięki, doceniam pomoc. – mistShaker

+0

Tworzę mój jar za pomocą wtyczki gradle. Czy możliwe jest nazywanie aplikacji tym podejściem? Obecnie po prostu podnosi nazwę głównej klasy. – rockydgeekgod

+0

Ponieważ wszystkie trzy przedstawione podejścia są pozajęzykowymi mechanizmami zależnymi od platformy, nie wiem dlaczego nie; możesz zapytać w [tag: gradle]. – trashgod

Powiązane problemy