Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8048096

UIManager.setLookAndFeel() hangs when invoked in a SWT app

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Fix
    • Icon: P3 P3
    • 9
    • 7, 8, 9
    • client-libs
    • None

      FULL PRODUCT VERSION :
      java version " 1.7.0_07 "
      Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
      Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

      ADDITIONAL OS VERSION INFORMATION :
      Max OSX Lion

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      Eclipse 3.7.2

      A DESCRIPTION OF THE PROBLEM :
      When trying to set LookAndFeel in Mac OSX Eclipse application for swing/awt UI support it hangs.


      REGRESSION. Last worked in version 6u31

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Need Eclipse SWT jars in path and this code


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      IT should not hang.
      ACTUAL -
      Thread Dump


      2012-10-16 18:35:57
      Full thread dump Java HotSpot(TM) 64-Bit Server VM (23.3-b01 mixed mode):

       " RMI TCP Connection(2)-10.98.192.163 " daemon prio=5 tid=0x00007fac0c8d4800 nid=0x6703 runnable [0x00000008e3df5000]
         java.lang.Thread.State: RUNNABLE
      at java.net.SocketInputStream.socketRead0(Native Method)
      at java.net.SocketInputStream.read(SocketInputStream.java:150)
      at java.net.SocketInputStream.read(SocketInputStream.java:121)
      at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
      at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
      - locked <0x000000061247bde8> (a java.io.BufferedInputStream)
      at java.io.FilterInputStream.read(FilterInputStream.java:83)
      at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
      at java.lang.Thread.run(Thread.java:722)

         Locked ownable synchronizers:
      - <0x000000060fb8de88> (a java.util.concurrent.ThreadPoolExecutor$Worker)

       " JMX server connection timeout 16 " daemon prio=5 tid=0x00007fac0b90c800 nid=0x6603 in Object.wait() [0x00000008e3cf2000]
         java.lang.Thread.State: TIMED_WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on <0x0000000610631ae8> (a [I)
      at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:168)
      - locked <0x0000000610631ae8> (a [I)
      at java.lang.Thread.run(Thread.java:722)

         Locked ownable synchronizers:
      - None

       " RMI Scheduler(0) " daemon prio=5 tid=0x00007fac0b598000 nid=0x6503 waiting on condition [0x00000008e3bef000]
         java.lang.Thread.State: TIMED_WAITING (parking)
      at sun.misc.Unsafe.park(Native Method)
      - parking to wait for <0x000000060f900288> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
      at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1090)
      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807)
      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
      at java.lang.Thread.run(Thread.java:722)

         Locked ownable synchronizers:
      - None

       " RMI TCP Connection(1)-10.98.192.163 " daemon prio=5 tid=0x00007fac0d80e000 nid=0x6407 runnable [0x00000008e3ae9000]
         java.lang.Thread.State: RUNNABLE
      at java.net.SocketInputStream.socketRead0(Native Method)
      at java.net.SocketInputStream.read(SocketInputStream.java:150)
      at java.net.SocketInputStream.read(SocketInputStream.java:121)
      at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
      at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
      - locked <0x00000006105c4ae8> (a java.io.BufferedInputStream)
      at java.io.FilterInputStream.read(FilterInputStream.java:83)
      at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
      at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
      at java.lang.Thread.run(Thread.java:722)

         Locked ownable synchronizers:
      - <0x000000060fb8cf10> (a java.util.concurrent.ThreadPoolExecutor$Worker)

       " RMI TCP Accept-0 " daemon prio=5 tid=0x00007fac0b597000 nid=0x2c07 runnable [0x00000008e39e6000]
         java.lang.Thread.State: RUNNABLE
      at java.net.PlainSocketImpl.socketAccept(Native Method)
      at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:398)
      at java.net.ServerSocket.implAccept(ServerSocket.java:522)
      at java.net.ServerSocket.accept(ServerSocket.java:490)
      at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:52)
      at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:387)
      at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:359)
      at java.lang.Thread.run(Thread.java:722)

         Locked ownable synchronizers:
      - None

       " Attach Listener " daemon prio=5 tid=0x00007fac0b01d000 nid=0x3407 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

         Locked ownable synchronizers:
      - None

       " AWT-EventQueue-0 " prio=5 tid=0x00007fac0c8f3000 nid=0x600b runnable [0x00000008e2bbb000]
         java.lang.Thread.State: RUNNABLE
      at sun.lwawt.macosx.LWCToolkit.loadNativeColors(Native Method)
      at sun.lwawt.macosx.LWCToolkit.loadSystemColors(LWCToolkit.java:119)
      at java.awt.SystemColor.updateSystemColors(SystemColor.java:468)
      at java.awt.SystemColor.<clinit>(SystemColor.java:460)
      at sun.misc.Unsafe.ensureClassInitialized(Native Method)
      at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:43)
      at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:140)
      at java.lang.reflect.Field.acquireFieldAccessor(Field.java:949)
      at java.lang.reflect.Field.getFieldAccessor(Field.java:930)
      at java.lang.reflect.Field.get(Field.java:372)
      at javax.swing.plaf.basic.BasicLookAndFeel.loadSystemColors(BasicLookAndFeel.java:413)
      at javax.swing.plaf.basic.BasicLookAndFeel.initSystemColorDefaults(BasicLookAndFeel.java:353)
      at com.apple.laf.AquaLookAndFeel.getDefaults(AquaLookAndFeel.java:226)
      at javax.swing.UIManager.setLookAndFeel(UIManager.java:536)
      at javax.swing.UIManager.setLookAndFeel(UIManager.java:580)
      at com.tibco.cep.studio.ui.Java7Test.setSystemLookAndFeel(Java7Test.java:99)
      at com.tibco.cep.studio.ui.Java7Test$2.run(Java7Test.java:60)
      at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:241)
      at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
      at java.awt.EventQueue.access$200(EventQueue.java:103)
      at java.awt.EventQueue$3.run(EventQueue.java:682)
      at java.awt.EventQueue$3.run(EventQueue.java:680)
      at java.security.AccessController.doPrivileged(Native Method)
      at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
      at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
      at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
      at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
      at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

         Locked ownable synchronizers:
      - None

       " AWT-Shutdown " prio=5 tid=0x00007fac0c842800 nid=0x610b in Object.wait() [0x00000008e2a6d000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on <0x000000060db2f168> (a java.lang.Object)
      at java.lang.Object.wait(Object.java:503)
      at sun.awt.AWTAutoShutdown.run(AWTAutoShutdown.java:287)
      - locked <0x000000060db2f168> (a java.lang.Object)
      at java.lang.Thread.run(Thread.java:722)

         Locked ownable synchronizers:
      - None

       " Service Thread " daemon prio=5 tid=0x00007fac0b809000 nid=0x3c03 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

         Locked ownable synchronizers:
      - None

       " C2 CompilerThread1 " daemon prio=5 tid=0x00007fac0b808800 nid=0x3b03 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

         Locked ownable synchronizers:
      - None

       " C2 CompilerThread0 " daemon prio=5 tid=0x00007fac0b800800 nid=0x3a03 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

         Locked ownable synchronizers:
      - None

       " Signal Dispatcher " daemon prio=5 tid=0x00007fac0b806800 nid=0x3903 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

         Locked ownable synchronizers:
      - None

       " Finalizer " daemon prio=5 tid=0x00007fac0d057000 nid=0x2a03 in Object.wait() [0x00000008df4e6000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on <0x000000060d295798> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:135)
      - locked <0x000000060d295798> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:151)
      at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:177)

         Locked ownable synchronizers:
      - None

       " Reference Handler " daemon prio=5 tid=0x00007fac0d056000 nid=0x2903 in Object.wait() [0x00000008df3e3000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on <0x000000060d295320> (a java.lang.ref.Reference$Lock)
      at java.lang.Object.wait(Object.java:503)
      at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
      - locked <0x000000060d295320> (a java.lang.ref.Reference$Lock)

         Locked ownable synchronizers:
      - None

       " main " prio=5 tid=0x00007fac0d000000 nid=0x707 in Object.wait() [0x00007fff67517000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(Native Method)
      - waiting on <0x000000060db352d0> (a java.awt.EventQueue$1AWTInvocationLock)
      at java.lang.Object.wait(Object.java:503)
      at java.awt.EventQueue.invokeAndWait(EventQueue.java:1252)
      - locked <0x000000060db352d0> (a java.awt.EventQueue$1AWTInvocationLock)
      at com.tibco.cep.studio.ui.Java7Test.callTest(Java7Test.java:58)
      at com.tibco.cep.studio.ui.Java7Test.main(Java7Test.java:27)

         Locked ownable synchronizers:
      - None

       " VM Thread " prio=5 tid=0x00007fac0d053800 nid=0x2803 runnable

       " GC task thread#0 (ParallelGC) " prio=5 tid=0x00007fac0d00d000 nid=0x2003 runnable

       " GC task thread#1 (ParallelGC) " prio=5 tid=0x00007fac0d00e000 nid=0x2103 runnable

       " GC task thread#2 (ParallelGC) " prio=5 tid=0x00007fac0d00e800 nid=0x2203 runnable

       " GC task thread#3 (ParallelGC) " prio=5 tid=0x00007fac0d00f000 nid=0x2303 runnable

       " GC task thread#4 (ParallelGC) " prio=5 tid=0x00007fac0d00f800 nid=0x2403 runnable

       " GC task thread#5 (ParallelGC) " prio=5 tid=0x00007fac0d010800 nid=0x2503 runnable

       " GC task thread#6 (ParallelGC) " prio=5 tid=0x00007fac0d011000 nid=0x2603 runnable

       " GC task thread#7 (ParallelGC) " prio=5 tid=0x00007fac0d011800 nid=0x2703 runnable

       " VM Periodic Task Thread " prio=5 tid=0x00007fac0b806000 nid=0x3d03 waiting on condition

      JNI global references: 201


      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------

      import java.awt.EventQueue;
      import java.lang.reflect.InvocationTargetException;

      import javax.swing.UIManager;
      import javax.swing.UnsupportedLookAndFeelException;

      import org.eclipse.swt.SWT;
      import org.eclipse.swt.events.SelectionAdapter;
      import org.eclipse.swt.events.SelectionEvent;
      import org.eclipse.swt.graphics.Color;
      import org.eclipse.swt.layout.FillLayout;
      import org.eclipse.swt.widgets.Button;
      import org.eclipse.swt.widgets.Display;
      import org.eclipse.swt.widgets.Shell;

      public class Java7Test {
          public static void main( String[] argv )
                  throws InterruptedException {
              final Display display = new Display();
              final Shell shell = new Shell( display );
              shell.setSize( 200, 200 );
              shell.setLayout( new FillLayout() );
              
              shell.setBackground( display.getSystemColor( SWT.COLOR_BLUE ) );
              callTest(); // does not work! hangs
              
              Button but = new Button( shell, SWT.PUSH );
              but.setText( " Push Me " );
              but.addSelectionListener( new SelectionAdapter() {
                  public void widgetSelected( SelectionEvent e ) {
                      java.awt.Color color = UIManager.getColor( " Panel.background " );
                      shell.setBackground( new Color( display, color.getRed(), color.getGreen(), color.getBlue() ) );
                      //callTest(); // works
                      
                  }
                  



              } );

              shell.open();
              while ( !shell.isDisposed() ) {
                  if ( !display.readAndDispatch() )
                      display.sleep();
              }
              display.dispose();
              
              System.exit( 0 );
          }

      private static boolean isLookAndFeelInitialized;
          
          private static void callTest () {
      try {
      EventQueue.invokeAndWait(new Runnable() {
      public void run() {
      setSystemLookAndFeel();
      }
      });
      } catch (InterruptedException e) {
      SWT.error(SWT.ERROR_FAILED_EXEC, e);
      } catch (InvocationTargetException e) {
      SWT.error(SWT.ERROR_FAILED_EXEC, e);
      }
      }

      protected static void setSystemLookAndFeel() {
      assert EventQueue.isDispatchThread();
      if (!isLookAndFeelInitialized) {
      isLookAndFeelInitialized = true;
      try {
      String systemLaf = UIManager.getSystemLookAndFeelClassName();
      //String xplatLaf = UIManager.getCrossPlatformLookAndFeelClassName();
      // Java makes metal the system look and feel if running under a
      // non-gnome Linux desktop. Fix that here, if the RCP itself is
      // running with the GTK windowing system set.
      /*
      if (xplatLaf.equals(systemLaf) && SWT.getPlatform().equals( " gtk " )) {
      systemLaf = GTK_LOOK_AND_FEEL_NAME;
      }
      UIManager.setLookAndFeel(systemLaf);
      */

      if (SWT.getPlatform().equals( " gtk " )) {
      //System.out.println( " System L&F: " + systemLaf);
      if (systemLaf.equalsIgnoreCase(com.tibco.cep.tpcl.Activator.GTK_LOOK_AND_FEEL_NAME)) {
      //UIManager.setLookAndFeel(METAL_LOOK_AND_FEEL_NAME);
      // The following is same as Metal
      UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
      System.out.println( " Setting L&F: " + UIManager.getLookAndFeel());
      }
      } else {
      try {

      System.out.println( " START " );
      UIManager.setLookAndFeel(systemLaf);
      } finally {
      System.out.println( " END " );
      }
      }

      //Setting No Erase Background
      //TODO - To avoid flicker -- this setting works only on Windows
      if ( " win32 " .equals(SWT.getPlatform())) {
      System.setProperty( " sun.awt.noerasebackground " , " true " );
      }
      } catch (ClassNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (InstantiationException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (IllegalAccessException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      } catch (UnsupportedLookAndFeelException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }
      }
      }
          
          
      }
      ---------- END SOURCE ----------

            ssadetsky Semyon Sadetsky (Inactive)
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: