使用AlloyLookAndFeel后,再设置所有新JFrame都用当前外观为其提供  Window  装饰,然后在JTextField中输入中文时就会抛出好多异常,具体见下面。但是去掉JFrame.setDefaultLookAndFeelDecorated(true);或者参数改为false后就没问题,为什么?  
 
异常如下:  
----------------------------------------------------------------------------------  
Exception  in  thread  "AWT-EventQueue-0"  java.lang.NullPointerException  
               at  java.util.Hashtable.get(Hashtable.java:336)  
               at  javax.swing.KeyboardManager.registerMenuBar(KeyboardManager.java:263)  
 
               at  javax.swing.JMenuBar.addNotify(JMenuBar.java:679)  
               at  java.awt.Container.addNotify(Container.java:2500)  
               at  javax.swing.JComponent.addNotify(JComponent.java:4469)  
               at  java.awt.Container.addImpl(Container.java:1052)  
               at  javax.swing.JLayeredPane.addImpl(JLayeredPane.java:204)  
               at  java.awt.Container.add(Container.java:899)  
               at  com.incors.plaf.alloy.AlloyRootPaneUI.addTitlePane(Unknown  Source)  
               at  com.incors.plaf.alloy.AlloyRootPaneUI.installWindowDecoration(Unknown  
 Source)  
               at  com.incors.plaf.alloy.AlloyRootPaneUI.propertyChange(Unknown  Source)  
               at  java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSup  
port.java:333)  
               at  java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSup  
port.java:270)  
               at  java.awt.Component.firePropertyChange(Component.java:7159)  
               at  javax.swing.JComponent.addNotify(JComponent.java:4470)  
               at  javax.swing.JRootPane.addNotify(JRootPane.java:680)  
               at  java.awt.Container.addNotify(Container.java:2500)  
               at  java.awt.Window.addNotify(Window.java:466)  
               at  java.awt.Frame.addNotify(Frame.java:501)  
               at  java.awt.Window.pack(Window.java:484)  
               at  sun.awt.im.CompositionArea.<init>(CompositionArea.java:71)  
               at  sun.awt.im.CompositionAreaHandler.createCompositionArea(CompositionAr  
eaHandler.java:56)  
               at  sun.awt.im.CompositionAreaHandler.inputMethodTextChanged(CompositionA  
reaHandler.java:169)  
               at  sun.awt.im.CompositionAreaHandler.processInputMethodEvent(Composition  
AreaHandler.java:144)  
               at  sun.awt.im.InputMethodContext.dispatchEvent(InputMethodContext.java:1  
75)  
               at  java.awt.Component.dispatchEventImpl(Component.java:3902)  
               at  java.awt.Container.dispatchEventImpl(Container.java:2024)  
               at  java.awt.Component.dispatchEvent(Component.java:3803)  
               at  java.awt.EventQueue.dispatchEvent(EventQueue.java:463)  
               at  java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh  
read.java:242)  
               at  java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre  
ad.java:163)  
               at  java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)  
 
               at  java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)  
 
               at  java.awt.EventDispatchThread.run(EventDispatchThread.java:110)  
------------------------------------------------------------------------------------------  
 

解决方案 »

  1.   

    多次输入后就会自动退出并生成一个错误文挡,下面自动生成的错误信息文挡:#
    # An unexpected error has been detected by HotSpot Virtual Machine:
    #
    #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x76303e44, pid=2748, tid=3676
    #
    # Java VM: Java HotSpot(TM) Client VM (1.5.0_07-b03 mixed mode, sharing)
    # Problematic frame:
    # C  [IMM32.DLL+0x3e44]
    #---------------  T H R E A D  ---------------Current thread (0x02e0a958):  JavaThread "AWT-Windows" daemon [_thread_in_native, id=3676]siginfo: ExceptionCode=0xc0000005, reading address 0x000db000Registers:
    EAX=0x00000000, EBX=0x0000e0d4, ECX=0x00000000, EDX=0x00000400
    ESP=0x0334f760, EBP=0x0334f76c, ESI=0x000db000, EDI=0x000015fa
    EIP=0x76303e44, EFLAGS=0x00010246Top of Stack: (sp=0x0334f760)
    0x0334f760:   000cc4f1 000cc4f9 03055ff8 0334f794
    0x0334f770:   763053f2 00010101 000cc4f9 00000000
    0x0334f780:   01d10157 000cc208 00000001 7c832e9c
    0x0334f790:   7c832e9c 0334f7c4 7630550f 01d10157
    0x0334f7a0:   00000000 00000020 00000002 00000002
    0x0334f7b0:   00000001 00000000 03055ff8 00000008
    0x0334f7c0:   00000020 01d10157 6d1350dd 01d10157
    0x0334f7d0:   00000020 03055ff8 00000008 00000018 Instructions: (pc=0x76303e44)
    0x76303e34:   57 8b 7d 08 33 db 85 ff 74 29 56 8b 75 0c 33 c0
    0x76303e44:   8a 06 50 ff 75 10 ff 15 30 12 30 76 85 c0 74 0b 
    Stack: [0x03310000,0x03350000),  sp=0x0334f760,  free space=253k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C  [IMM32.DLL+0x3e44]
    C  [IMM32.DLL+0x53f2]
    C  [IMM32.DLL+0x550f]Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
    j  sun.awt.windows.WToolkit.eventLoop()V+0
    j  sun.awt.windows.WToolkit.run()V+69
    j  java.lang.Thread.run()V+11
    v  ~StubRoutines::call_stub---------------  P R O C E S S  ---------------Java Threads: ( => current thread )
      0x03095bd0 JavaThread "AWT-EventQueue-0" [_thread_blocked, id=4884]
      0x03095688 JavaThread "TimerQueue" daemon [_thread_blocked, id=2264]
      0x00036a30 JavaThread "DestroyJavaVM" [_thread_blocked, id=5668]
      0x02f49010 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=2752]
    =>0x02e0a958 JavaThread "AWT-Windows" daemon [_thread_in_native, id=3676]
      0x02d88e00 JavaThread "AWT-Shutdown" [_thread_blocked, id=5132]
      0x00a6e900 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=2152]
      0x00a6d600 JavaThread "CompilerThread0" daemon [_thread_blocked, id=6052]
      0x00a7f7e8 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=5820]
      0x00a41850 JavaThread "Finalizer" daemon [_thread_blocked, id=5240]
      0x00a40d48 JavaThread "Reference Handler" daemon [_thread_blocked, id=3120]Other Threads:
      0x00a3e450 VMThread [id=228]
      0x00a79468 WatcherThread [id=4484]VM state:not at safepoint (normal execution)VM Mutex/Monitor currently owned by a thread: NoneHeap
     def new generation   total 576K, used 148K [0x22bd0000, 0x22c70000, 0x230b0000)
      eden space 512K,  16% used [0x22bd0000, 0x22be5100, 0x22c50000)
      from space 64K, 100% used [0x22c60000, 0x22c70000, 0x22c70000)
      to   space 64K,   0% used [0x22c50000, 0x22c50000, 0x22c60000)
     tenured generation   total 2056K, used 1258K [0x230b0000, 0x232b2000, 0x26bd0000)
       the space 2056K,  61% used [0x230b0000, 0x231eabe0, 0x231eac00, 0x232b2000)
     compacting perm gen  total 8192K, used 1167K [0x26bd0000, 0x273d0000, 0x2abd0000)
       the space 8192K,  14% used [0x26bd0000, 0x26cf3fd0, 0x26cf4000, 0x273d0000)
        ro space 8192K,  67% used [0x2abd0000, 0x2b12d9f8, 0x2b12da00, 0x2b3d0000)
        rw space 12288K,  46% used [0x2b3d0000, 0x2b973808, 0x2b973a00, 0x2bfd0000)Dynamic libraries:
    0x00400000 - 0x0040d000  E:\Program Files\Java\jdk1.5.0_07\bin\java.exe
    0x7c920000 - 0x7c9b4000  C:\WINDOWS\system32\ntdll.dll
    0x7c800000 - 0x7c91c000  C:\WINDOWS\system32\kernel32.dll
    0x77da0000 - 0x77e49000  C:\WINDOWS\system32\ADVAPI32.dll
    0x77e50000 - 0x77ee1000  C:\WINDOWS\system32\RPCRT4.dll
    0x77be0000 - 0x77c38000  C:\WINDOWS\system32\MSVCRT.dll
    0x6d730000 - 0x6d8c7000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\client\jvm.dll
    0x77d10000 - 0x77d9f000  C:\WINDOWS\system32\USER32.dll
    0x77ef0000 - 0x77f37000  C:\WINDOWS\system32\GDI32.dll
    0x76b10000 - 0x76b3a000  C:\WINDOWS\system32\WINMM.dll
    0x76300000 - 0x7631d000  C:\WINDOWS\system32\IMM32.DLL
    0x62c20000 - 0x62c29000  C:\WINDOWS\system32\LPK.DLL
    0x73fa0000 - 0x7400b000  C:\WINDOWS\system32\USP10.dll
    0x6d2f0000 - 0x6d2f8000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\hpi.dll
    0x76bc0000 - 0x76bcb000  C:\WINDOWS\system32\PSAPI.DLL
    0x6d700000 - 0x6d70c000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\verify.dll
    0x6d370000 - 0x6d38d000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\java.dll
    0x6d720000 - 0x6d72f000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\zip.dll
    0x6d070000 - 0x6d1d7000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\awt.dll
    0x72f70000 - 0x72f96000  C:\WINDOWS\system32\WINSPOOL.DRV
    0x76990000 - 0x76acd000  C:\WINDOWS\system32\ole32.dll
    0x736d0000 - 0x73719000  C:\WINDOWS\system32\ddraw.dll
    0x73b30000 - 0x73b36000  C:\WINDOWS\system32\DCIMAN32.dll
    0x738b0000 - 0x73980000  C:\WINDOWS\system32\D3DIM700.DLL
    0x74680000 - 0x746cb000  C:\WINDOWS\system32\MSCTF.dll
    0x76d70000 - 0x76d92000  C:\WINDOWS\system32\apphelp.dll
    0x73640000 - 0x7366e000  C:\WINDOWS\system32\msctfime.ime
    0x4a3e0000 - 0x4a405000  C:\WINDOWS\system32\winabc.ime
    0x7d590000 - 0x7dd82000  C:\WINDOWS\system32\SHELL32.dll
    0x77f40000 - 0x77fb6000  C:\WINDOWS\system32\SHLWAPI.dll
    0x77180000 - 0x77283000  C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll
    0x5d170000 - 0x5d20a000  C:\WINDOWS\system32\comctl32.dll
    0x6d2b0000 - 0x6d2ef000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\fontmanager.dll
    0x6d530000 - 0x6d543000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\net.dll
    0x71a20000 - 0x71a37000  C:\WINDOWS\system32\WS2_32.dll
    0x71a10000 - 0x71a18000  C:\WINDOWS\system32\WS2HELP.dll
    0x719c0000 - 0x719fe000  C:\WINDOWS\system32\mswsock.dll
    0x60fd0000 - 0x61025000  C:\WINDOWS\system32\hnetcfg.dll
    0x58a00000 - 0x58a07000  C:\WINDOWS\System32\wship6.dll
    0x6d550000 - 0x6d559000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\nio.dll
    0x6d230000 - 0x6d253000  E:\Program Files\Java\jdk1.5.0_07\jre\bin\dcpr.dllVM Arguments:
    java_command: login
    Launcher Type: SUN_STANDARDEnvironment Variables:
    JAVA_HOME=E:\Program Files\Java\jdk1.5.0_07
    CLASSPATH=.;.;e:\PROGRA~1\java\JDK15~1.0_0\lib\sound.jar;e:\PROGRA~1\java\JDK15~1.0_0\lib\jmf.jar;e:\PROGRA~1\java\JDK15~1.0_0\lib;C:\WINDOWS\java\classes;.
    PATH=E:\Program Files\Java\jet4.5-eval\bin;c:\Perl\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI.ACE\;E:\Program Files\Java\jdk1.5.0_07\bin;E:\Program Files\Java\jdk1.5.0_07\jre\bin
    USERNAME=Jason
    OS=Windows_NT
    PROCESSOR_IDENTIFIER=x86 Family 15 Model 47 Stepping 2, AuthenticAMD---------------  S Y S T E M  ---------------OS: Windows XP Build 2600 Service Pack 2CPU:total 1 family 47, cmov, cx8, fxsr, mmx, sse, sse2Memory: 4k page, physical 1048048k(583204k free), swap 2519192k(2157640k free)vm_info: Java HotSpot(TM) Client VM (1.5.0_07-b03) for windows-x86, built on May  3 2006 01:04:38 by "java_re" with MS VC++ 6.0
      

  2.   

    我也遇到过这个问题,在JAVA1.5以前解决不了,
    换成1.6的没有问题了,你去试一下
      

  3.   

    这个问题,我也提出过!现在都还没有解决呢?!
    http://community.csdn.net/Expert/topic/5096/5096749.xml?temp=.2967646
      

  4.   

    把 AlloyLookAndFeel.setProperty("alloy.isLookAndFeelFrameDecoration", "true"); 这句去掉,使用系统自己的窗口边框样式,或者如果可以的话,换成1.6版jdk,这个bug在1.6里面改正了。如果用不了1.6的话,试试这个:Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
    boolean firstInputEvent = true;
    public void eventDispatched(AWTEvent event) {
    if (firstInputEvent) {
    firstInputEvent = false;
    JFrame.setDefaultLookAndFeelDecorated(false); final AWTEventListener listener = this;
    SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    JFrame.setDefaultLookAndFeelDecorated(true);
    Toolkit.getDefaultToolkit().removeAWTEventListener(listener);
    }
    });
    }
    }
    }, AWTEvent.INPUT_METHOD_EVENT_MASK);把这段放在 setLookAndFeel()之后