2014-09-26 10 views
5

Ok, quindi ho già eseguito le applicazioni Swing e so se si desidera visualizzare un nome diverso per il menu dell'applicazione (quello sui Mac che di solito hanno un "Preferenze "e" Esci "), devi usare: System.setProperty("com.apple.mrj.application.apple.menu.about.name", "App name"); e deve essere eseguito prima della creazione di JFrame. L'ho fatto, ma continua a mostrare il nome della mia classe principale come nome del menu, come se non avessi scritto quella riga di codice. Ho cercato su Google questo problema, ma non sono riuscito a trovare nulla di utile, quindi ho cercato solo qui, ma chiunque avesse un problema simile stava eseguendo Java 1.5, 1.6 o 1.7. Quindi ho pensato che forse aveva qualcosa a che fare con la mia versione attuale di Java, 1.8.Il nome del menu dell'applicazione Swing non viene visualizzato correttamente in Java 1.8

This, this e this non ha funzionato. This, this e this o mi hanno inviato a informazioni obsolete, oppure i collegamenti non funzionavano più. Inoltre, sto usando Mac 10.8.

Qualsiasi suggerimento/risposta sarebbe molto apprezzato.

Un aggiornamento:

ecco il codice Inizialmente avevo:

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

    } 

} 

E qui è una soluzione che trashgod fornito a qualcun altro:

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

E a quanto pare ho bisogno di 10 la reputazione di pubblicare immagini, quindi non posso mostrarti il ​​risultato, ma non ha funzionato.

+1

[Questo] (http://stackoverflow.com/a/11915509/230513) funziona per me su 10.9, Java 8. Per informazioni più specifiche, si prega di modificare la tua domanda per includere un [completa esempio] (http://stackoverflow.com/help/mcve) che mostra il problema che descrivi. – trashgod

+0

@trashgod Ho copiato letteralmente la soluzione che hai postato [qui] (http://stackoverflow.com/questions/8955638/how-do-i-move-my-jmenubar-to-the-screen-menu-bar-on -Mac-os-x/8956715 # 8956715). L'unica differenza è che ho la classe in un pacchetto non predefinito, e ho il riferimento 'pacchetto bouncing_off_axes' nel codice. Non ha funzionato, il menu ha continuato a visualizzare il nome della classe e non il nome impostato. Modificherò il mio post e inserirò ciò che avevo in origine e l'esempio che hai fornito.Inoltre, mi piacerebbe apportare questa modifica nel codice, e non sulla riga di comando. – mistShaker

+1

AFAIK, l'approccio 'setProperty()' fallisce con Java 8. Perché non aggiungere il tuo JAR a un pacchetto di applicazioni, per [esempio] (http://stackoverflow.com/a/14485964/230513)? – trashgod

risposta

5

Utilizzo di Java 8 su Mac OS X 10.9, l'impostazione della proprietà System

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

sembra essere inefficaci nel cambiare il nome visualizzato nel menu delle applicazioni. Alternative che ancora funzionano includono questi:

  • Per impostazione predefinita, il menu delle applicazioni per visualizzare il semplice nome della classe specificato nella riga di comando o java l'attributo Main-Class dei manifesti del JAR.

    java -cp build/classes mypackage.Name 
    java -jar dist/MyJar.jar 
    
  • Utilizzare il parametro della riga di comando -Xdock:name="Name".

    java -Xdock:name="Name" -cp build/classes mypackage.Main 
    java -Xdock:name="Name" -jar MyJar.jar 
    
  • Aggiungere il JAR applicazione ad un pacchetto di applicazioni per Mac, come mostrato here, un add l'attributo al Info.plist.

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

Grazie, apprezzo l'aiuto. – mistShaker

+0

Sto creando il mio jar usando il plugin gradle. È possibile denominare l'applicazione con tale approccio? Attualmente prende solo il nome della classe principale. – rockydgeekgod

+0

Dato che tutti e tre gli approcci mostrati sono meccanismi extra-linguistici, dipendenti dalla piattaforma, non so perché no; potresti chiedere in [tag: gradle]. – trashgod

Problemi correlati