Exception in thread “AWT-EventQueue-0” java.lang.IllegalAccessError: superclass access check failed: class com.sun.java.swing.plaf.windows.XPStyle$SkinPainter (in unnamed module @0x4bb16cf4) cannot access class sun.swing.CachedPainter (in module java.desktop) because module java.desktop does not export sun.swing to unnamed module @0x4bb16cf4 at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862) at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681) at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at com.sun.java.swing.plaf.windows.XPStyle.<clinit>(XPStyle.java:71) at com.sun.java.swing.plaf.windows.WindowsComboBoxUI.createRenderer(WindowsComboBoxUI.java:392) at java.desktop/javax.swing.plaf.basic.BasicComboBoxUI.installUI(BasicComboBoxUI.java:304) at com.sun.java.swing.plaf.windows.WindowsComboBoxUI.installUI(WindowsComboBoxUI.java:144) at java.desktop/javax.swing.JComponent.setUI(JComponent.java:740) at uz.ncipro.calendar.JDateTimePicker.updateUI(JDateTimePicker.java:48) at java.desktop/javax.swing.JComboBox.init(JComboBox.java:266) at java.desktop/javax.swing.JComboBox.<init>(JComboBox.java:260) at uz.ncipro.calendar.JDateTimePicker.<init>(JDateTimePicker.java:26) at widget.Tanggal.<init>(Tanggal.java:17) at keuangan.DlgBilingRalan.initComponents(DlgBilingRalan.java:782) at keuangan.DlgBilingRalan.<init>(DlgBilingRalan.java:201) at simrskhanza.DlgKasirRalan.<init>(DlgKasirRalan.java:254) at simrskhanza.frmUtama.<init>(frmUtama.java:1184) at simrskhanza.frmUtama.getInstance(frmUtama.java:1295) at simrskhanza.SIMRSKhanza.lambda$main$0(SIMRSKhanza.java:27) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Error tersebut menunjukkan bahwa ada masalah dengan akses ke kelas internal di modul Java (sun.swing.CachedPainter
) yang tidak diekspor oleh modul java.desktop
. Hal ini disebabkan oleh perubahan dalam modularisasi JDK sejak Java 9, di mana akses ke API internal seperti sun.swing
tidak lagi diizinkan secara default.
Error ini terjadi karena pustaka atau kode yang Anda gunakan, seperti Swing Look and Feel pada com.sun.java.swing.plaf.windows
, mencoba mengakses API internal yang tidak diekspor.
Penyebab Utama
- Kode Lama yang Tidak Kompatibel dengan JDK Modern: SIMRS Khanza kemungkinan menggunakan pustaka atau komponen (seperti
JDateTimePicker
) yang tidak diperbarui untuk mendukung modularisasi JDK. - JDK 21 Memperketat Modul Internal: JDK modern semakin ketat membatasi penggunaan API internal, sehingga pustaka atau framework lama yang mengandalkan modul internal seperti
sun.swing
akan gagal.
Solusi
1. Gunakan JVM Opsi --add-exports
Tambahkan opsi berikut saat menjalankan aplikasi untuk memperbolehkan modul java.desktop
mengekspor sun.swing
:
Langkah:
- Jika menjalankan dari NetBeans:
- Masuk ke Project Properties > Run > VM Options.
- Tambahkan:
- Jika menjalankan dari command-line:
2. Gunakan JDK Lama
Jika memungkinkan, gunakan JDK yang lebih tua, seperti JDK 8, di mana modularisasi belum diperkenalkan, atau JDK 17 (LTS) dengan lebih sedikit pembatasan dibandingkan JDK 21.
- BellSoft Liberica JDK 8 atau OpenJDK 8 sering digunakan dengan aplikasi lama seperti SIMRS Khanza.
- Untuk NetBeans, sesuaikan
netbeans_jdkhome
di file konfigurasinetbeans.conf
.
3. Pembaruan Kode
- Perbarui pustaka eksternal seperti
JDateTimePicker
agar kompatibel dengan versi Java modern. - Ubah implementasi kode yang menggunakan API internal (seperti
sun.swing.CachedPainter
) ke alternatif yang didukung.
4. Gunakan OpenJFX untuk JavaFX
Jika Anda bisa mengganti komponen Swing yang bermasalah dengan JavaFX, ini adalah solusi jangka panjang untuk menjaga kompatibilitas dengan versi Java modern.
5. Modifikasi Aplikasi Khanza
- Anda bisa mencoba memperbaiki kode secara langsung jika memiliki akses ke sumbernya. Periksa bagian
JDateTimePicker
dan pastikan tidak mengandalkansun.swing
.