在编写GUI界面的main()函数时,为什么加载了
javax.swing.SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        JFrame.setDefaultLookAndFeelDecorated(true);
        JDialog.setDefaultLookAndFeelDecorated(true);
        new myprogramLogin();//程序入口
      }
    });
在界面的输入框JTextFiled中只要输入中文,就会抛出下面的异常?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:4436)
at javax.swing.plaf.metal.MetalTitlePane.addNotify(MetalTitlePane.java:223)
at java.awt.Container.addNotify(Container.java:2500)
at javax.swing.JComponent.addNotify(JComponent.java:4436)
at java.awt.Container.addNotify(Container.java:2500)
at javax.swing.JComponent.addNotify(JComponent.java:4436)
at javax.swing.JRootPane.addNotify(JRootPane.java:680)
at java.awt.Container.addNotify(Container.java:2500)
at java.awt.Window.addNotify(Window.java:458)
at java.awt.Frame.addNotify(Frame.java:501)
at java.awt.Window.pack(Window.java:476)
at sun.awt.im.CompositionArea.<init>(CompositionArea.java:71)
at sun.awt.im.CompositionAreaHandler.createCompositionArea(CompositionAreaHandler.java:56)
at sun.awt.im.CompositionAreaHandler.inputMethodTextChanged(CompositionAreaHandler.java:169)
at sun.awt.im.CompositionAreaHandler.processInputMethodEvent(CompositionAreaHandler.java:144)
at sun.awt.im.InputMethodContext.dispatchEvent(InputMethodContext.java:175)
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(EventDispatchThread.java:234)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.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)假如直接在main()函数中new myprogramLogin();就没有问题,但是整个应用程序的装饰效果就没有了!这个问题在论坛曾经有人提出过[http://topic.csdn.net/t/20060223/09/4572000.html],但
好像没有实质解决?!!,今天我也碰上了!希望大家指点!谢谢!

解决方案 »

  1.   

    把 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()之后
      

  2.   

    在编写GUI界面的main()函数时,为什么加载了
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
          public void run() {
            JFrame.setDefaultLookAndFeelDecorated(true);
            JDialog.setDefaultLookAndFeelDecorated(true);
            new myprogramLogin();//程序入口
          }
        });
    想当于起了个线程,你总不希望所有事情都在一个线程上做吧