Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana Java untuk OS X 2013-004 mempengaruhi (break) aplikasi Swing?

Pembaruan 21-06-2013:jawaban ini berisi beberapa solusi dan alternatif yang mungkin berguna, tetapi jawaban @sidney-markowitz-biomatters berisi perbaikan kode yang benar - LAF perlu disetel dari utas acara!

Masalah baru-baru ini tampaknya terkait dengan pembaruan yang melanggar Aqua Look and Feel (LAF), yang merupakan default untuk aplikasi Swing di Mac OS X.

Jika Anda membutuhkan Aqua LAF maka tidak ada terlalu banyak pilihan. Anda mungkin perlu menunggu pembaruan Java berikutnya dari Apple (saya berasumsi mereka akan memperbaikinya dengan prioritas, mengingat itu adalah LAF mereka sendiri). Anda juga dapat mencoba menggunakan Java Application Bundler (yaitu membundel Oracle JRE dan menghindari menggunakan JRE sistem).

Jika Anda bisa bertahan dengan LAF yang berbeda maka aplikasi Anda akan berfungsi seperti biasa. Itu berlaku untuk PaperCut, setidaknya (pembaruan 003 menyebabkan beberapa masalah fokus jendela, pembaruan 004 menyebabkan kekacauan).

Beberapa opsi:

  • Menggunakan LAF lintas platform khusus versi Java dari kode Java (mis. Nimbus atau Metal):

    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName())
    
  • Menyetel LAF tertentu dari kode Java:

    UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel")
    
  • Mengganti LAF default dari terminal:

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

Dalam kasus kami, kami secara eksplisit memanggil UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) dalam kode kami dan menginginkan solusi yang tidak melibatkan perubahan kode (yaitu perbaikan terbaru), jadi kami perlu mengganti sistem default LAF sebagai berikut.

  • Mengganti LAF sistem dari terminal:

    java -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel ...
    
  • Mengganti LAF sistem dari Info.plist berkas (jika Anda telah dibundel sebagai aplikasi Mac, juga berfungsi untuk opsi VM lainnya) (mis. di My.app/Contents/Info.plist ).

    Anda ingin menambahkan -Dswing.systemlaf=javax.swing.plaf.nimbus.NimbusLookAndFeel sampai akhir dari <string> nilai untuk VMOptions <key> . Opsi dipisahkan oleh ruang, seperti dari terminal. Misalnya. jika Anda sudah memiliki useScreenMenuBar pilihan:

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


Edit:@trashgod meminta contoh yang dapat direproduksi. Saya tidak yakin apa cakupan penuh dari masalah dengan pembaruan 004, tetapi berikut ini reproduksi sederhana:

Perbarui 21-06-2013 - cara yang salah, menghasilkan kesalahan:

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. Jalankan dengan Apple JRE yang disertakan dengan pembaruan 004 (mis. di /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home ). Perhatikan bahwa pesan tidak terlihat, ikon dialog tidak terlihat, dan tombol tidak terlihat dapat diklik.

  2. Jalankan dengan Apple JRE lama atau JRE lain. Perhatikan bahwa dialog ditampilkan seperti yang diharapkan.

Perbarui 21-06-2013 - cara yang benar, di utas acara, berfungsi dengan benar:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya harus menyimpan GUID di Oracle?

  2. Memperbarui Tabel Oracle dari Excel VBA Macro menggunakan koneksi ODBC

  3. ORA-00932:tipe data tidak konsisten:diharapkan - mendapat CLOB

  4. Oracle SQL Where klausa untuk menemukan catatan tanggal yang lebih lama dari 30 hari

  5. Membuat penangan logging untuk terhubung ke Oracle?