2014-09-26 2 views
5

Okay, ich habe Swing-Anwendungen schon einmal gemacht, und ich weiß, ob Sie einen anderen Namen für das Anwendungsmenü (auf Macs mit "Einstellungen") haben möchten "und" Quit "-Option), müssen Sie verwenden: System.setProperty("com.apple.mrj.application.apple.menu.about.name", "App name"); und es muss ausgeführt werden, bevor der JFrame erstellt wird. Ich habe dies getan, aber es zeigt weiterhin den Namen meiner Hauptklasse als Menüname an, als ob ich diese Codezeile überhaupt nicht geschrieben hätte. Ich habe nach diesem Problem gegoogelt, konnte aber nichts Nützliches finden und habe dann hier gesucht, aber jeder, der ein ähnliches Problem hatte, führte Java 1.5, 1.6 oder 1.7 aus. Also dachte ich, dass es vielleicht etwas mit meiner aktuellen Java-Version 1.8 zu tun hat.Der Name des Swing-Anwendungsmenüs wird in Java nicht richtig angezeigt.

This, this und this hat nicht funktioniert. This, this und this haben mich entweder zu veralteten Informationen geschickt, oder die Links funktionierten nicht mehr. Außerdem laufe ich Mac 10.8.

Alle Vorschläge/Antworten würden sehr geschätzt werden.

Ein Update:

hier ist der Code, den ich ursprünglich hatte:

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"); 

    } 

} 

Und hier ist eine Lösung, die sonst zur Verfügung gestellt, um jemand trashgod:

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); 
       } 
      }); 
     } 
    } 

Und ich brauche offenbar 10 Ruf, um Bilder zu posten, damit ich Ihnen das Ergebnis nicht zeigen kann, aber es hat nicht geklappt.

+1

[Dies] (http://stackoverflow.com/a/11915509/230513) funktioniert für mich auf 10,9, Java 8. Weitere spezifische Hilfe, bearbeiten Sie bitte Ihre Frage gehören eine [vollständige Beispiel] (http://stackoverflow.com/help/mcve), das das von Ihnen beschriebene Problem aufweist. – trashgod

+0

@trashgod Ich kopierte wörtlich die Lösung, die Sie [hier] gepostet haben (http://stackoverflow.com/questions/8955638/how-doi-i-move-my-jmenubar-to-the-screen-menu-bar-on -mac-os-x/8956715 # 8956715). Der einzige Unterschied ist, dass ich die Klasse in einem nicht standardmäßigen Paket habe, und ich habe den Code 'package bouncing_off_axes' im Code. Es funktionierte nicht, das Menü zeigte weiterhin den Klassennamen an und nicht den Namen, der eingestellt wurde. Ich bearbeite meinen Beitrag und setze das, was ich ursprünglich hatte, und das von Ihnen bereitgestellte Beispiel.Außerdem möchte ich diese Änderung im Code vornehmen und nicht in der Befehlszeile. – mistShaker

+1

AFAIK, scheitert der 'setProperty()' Ansatz mit Java 8. Warum fügen Sie Ihre JAR nicht zu einem Anwendungsbündel hinzu, für [Beispiel] (http://StackOverflow.com/a/14485964/230513)? – trashgod

Antwort

5

mit Java 8 auf Mac OS X 10.9, die Einstellung der System Eigenschaft

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

in die Änderung des Namens im Anwendungsmenü angezeigt werden ineffektiv erscheint. Alternativen, die noch Arbeit umfassen diese:

  • standardmäßig das Anwendungsmenü die einfachen Namen der Klasse angegeben in der java Befehlszeile oder das Main-Class Attribute des Manifests der JAR anzuzeigen.

    java -cp build/classes mypackage.Name 
    java -jar dist/MyJar.jar 
    
  • Über die -Xdock:name="Name" Befehlszeilenparameter.

    java -Xdock:name="Name" -cp build/classes mypackage.Main 
    java -Xdock:name="Name" -jar MyJar.jar 
    
  • Fügen Sie die Anwendung JAR auf einem Mac Anwendungspaket, wie here gezeigt, fügen Sie ein das Attribut auf den Info.plist.

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

Danke, ich schätze die Hilfe. – mistShaker

+0

Ich erstelle meinen Krug mit dem Gradle-Plugin. Ist es möglich, die Anwendung mit diesem Ansatz zu benennen? Momentan wird nur der Name der Hauptklasse angezeigt. – rockydgeekgod

+0

Da alle drei Ansätze extralinguistische, plattformabhängige Mechanismen sind, weiß ich nicht warum nicht; Sie könnten in [Tag: Gradle] fragen. – trashgod

Verwandte Themen