sql >> Database >  >> RDS >> Oracle

Welke invloed heeft Java voor OS X 2013-004 op (break) Swing-applicaties?

Update 21-06-2013:dit antwoord bevat enkele tijdelijke oplossingen en alternatieven die nuttig kunnen zijn, maar het antwoord van @sidney-markowitz-biomatters bevat de juiste codefix - de LAF moet worden ingesteld vanuit de gebeurtenisthread!

De recente problemen lijken verband te houden met de updates die de Aqua Look and Feel (LAF) verbreken, wat de standaard is voor Swing-apps op Mac OS X.

Als je de Aqua LAF nodig hebt dan zijn er niet al te veel opties. Mogelijk moet je wachten op de volgende Java-update van Apple (ik neem aan dat ze dit met prioriteit zullen oplossen, aangezien het hun eigen LAF is). U kunt ook proberen de Java Application Bundler te gebruiken (d.w.z. bundel de Oracle JRE en vermijd het gebruik van de JRE van het systeem).

Als je met een andere LAF rond kunt komen, zou je app normaal moeten werken. Dat deed het in ieder geval voor PaperCut (de 003-update veroorzaakte enkele problemen met de vensterfocus, de 004-update veroorzaakte chaos).

Enkele opties:

  • De Java-versiespecifieke platformonafhankelijke LAF gebruiken vanuit Java-code (bijv. Nimbus of Metal):

    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName())
    
  • Een specifieke LAF instellen vanuit Java-code:

    UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel")
    
  • De standaard LAF van terminal overschrijven:

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

In ons geval belden we expliciet UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) in onze code en we wilden een tijdelijke oplossing zonder codewijziging (d.w.z. een hotfix), dus moesten we het standaard systeem overschrijven LAF als volgt.

  • Het systeem LAF overschrijven vanaf terminal:

    java -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel ...
    
  • Het systeem LAF overschrijven vanuit een Info.plist bestand (als je een Mac-applicatie hebt gebundeld, werkt ook voor de andere VM-opties) (bijvoorbeeld op My.app/Contents/Info.plist ).

    U wilt -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel toevoegen tot het einde van de <string> waarde voor de VMOptions <key> . De opties zijn ruimtegescheiden, net als bij de terminal. bijv. als je al een useScreenMenuBar . hebt optie:

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


Bewerken:@trashgod vroeg om een ​​reproduceerbaar voorbeeld. Ik weet niet zeker wat de volledige omvang van de problemen met de 004-update is, maar hier is een eenvoudige reproductie:

Update 21-06-2013 - op de verkeerde manier, de fout wordt gereproduceerd:

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. Uitvoeren met de Apple JRE die bij de 004-update wordt geleverd (bijv. op /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home ). Merk op dat het bericht niet zichtbaar is, het dialoogvensterpictogram niet zichtbaar is en de knop niet zichtbaar aanklikbaar is.

  2. Uitvoeren met een oudere Apple JRE of een andere JRE. Merk op dat het dialoogvenster wordt weergegeven zoals verwacht.

Update 2013-06-21 - op de juiste manier, in de gebeurtenisthread, werkt correct:

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. Verschil tussen CTE en SubQuery?

  2. SQLDeveloper geeft geen tabellen weer onder verbindingen waar tabellen staan

  3. Hoe kan ik ORA-00911:ongeldige tekenfout oplossen?

  4. Hoe de functie to_number() werkt in PostgreSQL