sql >> Databasteknik >  >> RDS >> Oracle

Hur påverkar Java för OS X 2013-004 (bryta) Swing-applikationer?

Uppdatering 2013-06-21:det här svaret innehåller några lösningar och alternativ som kan vara användbara, men @sidney-markowitz-biomatters svar innehåller rätt kodfix - LAF måste ställas in från händelsetråden!

De senaste problemen verkar vara relaterade till uppdateringarna som bryter Aqua Look and Feel (LAF), som är standard för Swing-appar på Mac OS X.

Om du behöver Aqua LAF så finns det inte för många alternativ. Du kan behöva vänta på nästa Java-uppdatering från Apple (jag antar att de kommer att fixa detta med prioritet, eftersom det är deras egen LAF). Du kan också prova att använda Java Application Bundler (dvs. bunta ihop Oracle JRE och undvik att använda systemets JRE).

Om du klarar dig med en annan LAF bör din app fungera som vanligt. Det gjorde det för PaperCut, åtminstone (003-uppdateringen orsakade vissa problem med fönsterfokus, 004-uppdateringen orsakade kaos).

Några alternativ:

  • Med den Java-versionsspecifika plattformsoberoende LAF från Java-kod (t.ex. Nimbus eller Metal):

    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName())
    
  • Ställa in en specifik LAF från Java-kod:

    UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel")
    
  • Åsidosätt standard-LAF från terminal:

    java -Dswing.defaultlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel MyApp
    

I vårt fall anropade vi uttryckligen UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) i vår kod och ville ha en lösning som inte involverade en kodändring (dvs. en snabbkorrigering), så vi behövde åsidosätta standardsystemet LAF enligt följande.

  • Åsidosättande av systemets LAF från terminal:

    java -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel ...
    
  • Åsidosättande av systemets LAF från en Info.plist fil (om du har paketerat som en Mac-applikation, fungerar även för de andra VM-alternativen) (t.ex. på My.app/Contents/Info.plist ).

    Du vill lägga till -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel till slutet av värde för VMOptions . Alternativen är utrymmesseparerade, precis som från terminalen. T.ex. om du redan har en useScreenMenuBar alternativ:

    <key>VMOptions</key>
    <string>-Dcom.apple.macos.useScreenMenuBar=true -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel</string>
    


Redigering:@trashgod bad om ett reproducerbart exempel. Jag är inte säker på vad problemen med 004-uppdateringen är i sin helhet, men här är en enkel reproduktion:

Uppdatering 2013-06-21 - på fel sätt, återskapar felet:

public class AquaLafTest {
    public static void main(String[] args) throws Exception {
        javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
        javax.swing.JOptionPane.showMessageDialog(null, "msg");
    }
}
  1. Kör med Apple JRE som följer med 004-uppdateringen (t.ex. på /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home ). Observera att meddelandet inte är synligt, att dialogikonen inte är synlig och att knappen inte är synligt klickbar.

  2. Kör med en äldre Apple JRE eller en annan JRE. Observera att dialogrutan visas som förväntat.

Uppdatering 2013-06-21 - på rätt sätt, i händelsetråden, fungerar korrekt:

public class AquaLafTest {
    public static void main(String[] args) throws Exception {
        javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
            public void run() {
                try {
                    javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
                    javax.swing.JOptionPane.showMessageDialog(null, "msg");
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}


  1. Hur man skickar en nollvariabel till en lagrad SQL-procedur från C#.net-kod

  2. Spara användarmodell i viloläge till Postgres

  3. Få kortdagsnamnet i SQL Server (T-SQL)

  4. Knee-Jerk PerfMon Counters:Sidans förväntade livslängd