Aplikasi Grafik Java Error diatas Lingkungan Unix

12 12 2008

Saat ini akan kita coba bahas mengenai Aplikasi Java yang didalamnya menggunakan elemen class “javax.swing.RepaintManager”, elemen ini biasanya digunakan jika dalam aplikasi yang kita bangun menggunakan komponen gambar, baik itu gambar jpg, bmp atau gif yang dapat di-generate secara programmatic oleh java. Aplikasi tersebut akan dapat dieksekusi secara lancar jika kita bekerja diatas lingkungan windows, tetapi kelancaran tersebut tidak akan didapatkan diatas lingkungan unix. Mungkin artikel berikut akan membantu menemukan penyebab dan menemukan solusi yang tepat untuk permasalahan tersebut.

Hal pertama yang harus kita lakukan adalah mengenal tanda – tanda dari error ini, yaitu jika aplikasi grafik yang kita bangun diatas lingkungan windows berfungsi dengan baik, sedangkan jika kita running diatas unix, tidak berjalan dengan baik. Untuk saat ini kita akan mengambil contoh kasus dari penggunaan dua buah tools java grafik untuk men-generated image, yaitu Jbarcode untuk menghasilkan barcode dengan format jpg atau gif, dan yang satu lagi adalah JFreechart untuk menghasilkan grafik diagram, baik itu diagram garis, batang, pie dan banyak lagi, yang menghasilkan gambar dengan format gambar jpg atau gif.

Terlepas dari cara penggunaan kedua tools tersebut, kita hanya akan langsung melihat kepada macam stackTrace yang dihasilkan dari tools tersebut jika running di atas lingkungan unix, berikut error yang dihasilkan dari JBarcode:

java.lang.NoClassDefFoundError: Could not initialize class javax.swing.RepaintManager
	at javax.swing.JComponent.repaint(JComponent.java:4732)
	at java.awt.Component.repaint(Component.java:2927)
	at javax.swing.JComponent.setForeground(JComponent.java:2673)
	at jbarcodebean.JBarcodeBean.setForeground(Unknown Source)
	at jbarcodebean.JBarcodeBean.(Unknown Source)
	at jbarcodebean.JBarcodeBean.(Unknown Source)
	at com.siriuserp.sdk.utility.BarcodeGenerator.init(BarcodeGenerator.java:45)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1178)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:832)
…
…
…
…
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
	at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
	at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

Error diatas menunjukan class RepaintManager yang tidak dapat di-inisialisasi-kan disebabkan java-app yang running diatas lingkungan unix, jumlah baris yang dihasilkan printStackTrace diatas aslinya terdiri dari banyak baris, tetapi untuk mempersempit bahasan cukuplah awal dan akhir dari printStackTrace tersebut yang ditampilkan, sedangkan jika kita menggunakan JFreechart sebagai salah satu tools dalam aplikasi kita maka error yang akan dihasilkan seperti berikut, seperti printStackTrace diatas tidak akan ditampilkan semua:

java.lang.NoClassDefFoundError: Could not initialize class org.jfree.chart.JFreeChart
	at org.jfree.chart.ChartFactory.createBarChart3D(ChartFactory.java:946)
… 
…
…
…
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
	at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
	at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

Biasanya kedua error printStackTrace diatas diikuti dengan error berikut:

java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:169)
	at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
	at sun.awt.X11.XToolkit.(XToolkit.java:89)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:169)
	at java.awt.Toolkit$2.run(Toolkit.java:836)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:828)
	at sun.swing.SwingUtilities2$AATextInfo.getAATextInfo(SwingUtilities2.java:120)
	at javax.swing.plaf.metal.MetalLookAndFeel.initComponentDefaults(MetalLookAndFeel.java:1556)
	at javax.swing.plaf.basic.BasicLookAndFeel.getDefaults(BasicLookAndFeel.java:130)
	at javax.swing.plaf.metal.MetalLookAndFeel.getDefaults(MetalLookAndFeel.java:1591)
	at javax.swing.UIManager.setLookAndFeel(UIManager.java:537)
	at javax.swing.UIManager.setLookAndFeel(UIManager.java:577)
	at javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1331)
	at javax.swing.UIManager.initialize(UIManager.java:1418)
	at javax.swing.UIManager.maybeInitialize(UIManager.java:1406)
	at javax.swing.UIManager.getDefaults(UIManager.java:656)
	at javax.swing.UIManager.getColor(UIManager.java:698)
	at org.jfree.chart.JFreeChart.(JFreeChart.java:248)
	at org.jfree.chart.ChartFactory.createBarChart3D(ChartFactory.java:946)
…
…
…
…
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
	at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
	at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

Adapun cara mengatasi permasalah diatas dapat dilakukan dengan dua cara, yaitu jika server unix tempat running applikasi tersebut tidak menggunakan lingkungan mode grafik dalam beroperasinya, maka dalam bash console cukup menuliskan perintah seperti berikut:

DISPLAY=:1.0;
export DISPLAY;

Atau bisa juga menuliskannya hanya dengan satu baris perintah:

export DISPLAY=:1.0;

Tetapi jika lingkungan unix sudah running dengan mode grafik sudah aktif maka langkah pertama diatas sudah tidak perlu dilakukan lagi, dan dapat langsung meneruskan ke langkah berikutnya yaitu menambahkan java option disaat aplikasi akan dijalankan, baik itu aplikasi web atau desktop, dengan cara menambahkan perintah berikut “-Djava.awt.headless=true”, jika kita menggunakan desktop applikasi dan menggunakan file *.bat atau *.sh untuk trigger file jar maka dapat menambahkan perintah dalam file tersebut menjadi seperti berikut:

java –Djava.awt.headless=true –jar SuatuAplikasi.jar

atau dapat juga di awal method main diawal aplikasi tersebut dituliskan seperti berikut:

System.setProperties("java.awt.headless", "true");

Berbeda cara dengan desktop berbeda pula caranya untuk web-app jika kita menggunakan Tomcat maka perintah diatas dapat disisipkan kedalam file catalina.bat atau catalina.sh kedalam variable JAVA_OPTS didalam file tersebut kemudian restart tomcat, lain lagi jika kita menggunakan glassfish java option dapat dikonfigurasi melalui browser setelah login sebagai admin dengan tahapan klik link berikut “Application Server” –> “JVM Settings” –> “JVM Options” maka akan menampilkan tampilan browser seperti berikut:

glassfish-view

Kemudian klik tombol “Add JVM Option” maka akan menghasilkan baris baru diatas list JVM option yang lain kemudian masukan perintah “Djava.awt.headless=true” kedalam baris baru tersebut, dilanjutkan dengan tekan tombol save, kemudian lakukan restart terhadap server glassfish tersebut.

Maka aplikasi yang menggunakan tools grafik tersebut sudah siap untuk running diatas lingkungan unix, tetapi perlu diingat kadang ada error yang dihasilkan jika kita salah mengkonfigurasikan “export DISPLAY=:1.0;” dengan menampilkan error stackTrace sebagai berikut:

java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.
	at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
	at sun.awt.X11GraphicsEnvironment.access$100(X11GraphicsEnvironment.java:52)
	at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:155)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.awt.X11GraphicsEnvironment.(X11GraphicsEnvironment.java:131)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:169)
	at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:68)
	at javax.swing.RepaintManager.(RepaintManager.java:177)
	at javax.swing.JComponent.repaint(JComponent.java:4732)
	at java.awt.Component.repaint(Component.java:2927)
	at javax.swing.JComponent.setForeground(JComponent.java:2673)
…
…
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:632)
	at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:272)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:637)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:568)
	at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:813)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
	at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
	at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
	at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)

Jika error seperti diatas terjadi, coba ulangi lagi proses “export DISPLAY” sampai error tersebut terselesaikan, dan perhatikan nilai yang harus di set dengan konfigurasi tersebut.

Mungkin saat ini hanya sekian ilmu yang bisa dibagi dengan pembaca semoga bermanfaat, jika ada kekurangan atau masukan yang dapat meningkatkan kemampuan jangan sungkan untuk memberikan komentar.

View Pdf Version

Advertisements

Actions

Information

2 responses

23 02 2012
My name

Thank you. I didn’t understand a single word that you wrote (I don’t speak your language, I don’t even know what language is that of yours) but reading carefully I found the solution to this strange exception. Thanks 🙂

28 02 2012
agienthea

@My name : i’m glad this article can help you.. :), event you don’t understand at all the language.. 😀

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s




%d bloggers like this: