import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MouseEvent2 extends JFrame{

private final JPanel panel=new JPanel();
private final JButton button=new JButton("移动我");

public MouseEvent2(){
super("焦点事件处理1");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(0,0,600,400);
getContentPane().add(panel);
panel.add(button);
button.addMouseListener(new Mouse1());
button.addMouseMotionListener(new Mouse1());
}


class Mouse1  implements MouseListener,MouseMotionListener{
//private Point point1;
private Point point2;
           private Point point3;  
public void mousePressed(MouseEvent e){
point3=e.getPoint();
}
public void mouseReleased(MouseEvent e){

}
public void mouseClicked(MouseEvent e){

}
public void mouseExited(MouseEvent e){

}

public void mouseEntered(MouseEvent e){

}

public void mouseDragged(MouseEvent e){
point2=e.getPoint();
button.setLocation(button.getX()+point2.x-point3.x,button.getY()+point2.y-point3.y);
}

        public void mouseMoved(MouseEvent e){

}
}

public static void main(String[] args){
new MouseEvent2().setVisible(true);
}
}
拖动鼠标时出现,请问是什么问题,谢谢
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at swing.event.MouseEvent.a.MouseEvent2$Mouse1.mouseDragged(MouseEvent2.java:56)
at java.awt.AWTEventMulticaster.mouseDragged(AWTEventMulticaster.java:303)
at java.awt.Component.processMouseMotionEvent(Component.java:6264)
at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3283)
at java.awt.Component.processEvent(Component.java:5985)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4583)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4237)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2475)
at java.awt.Component.dispatchEvent(Component.java:4413)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

解决方案 »

  1.   

    import java.awt.*; 
       import java.awt.event.*; 
       public class MouseTest extends Frame 
       { 
       public MouseTest() 
       { 
       Button b = new Button("JavaWorld JavaQ&A"); 
       b.addActionListener( new ActionListener() { 
       public void actionPerformed(ActionEvent e) 
       { 
       System.exit(0); 
       } 
       } 
       ); 
       add(b,BorderLayout.NORTH); 
       addMouseListener(new MouseTest.MouseHandler()); 
       addMouseMotionListener(new MouseTest.MouseMotionHandler()); 
       } 
       // MouseHandler is an inner class that implements the MouseListener. 
       // Each method simply prints out a message to the command line. 
       private class MouseHandler implements MouseListener 
       { 
       public void mousePressed(MouseEvent e) 
       { 
       System.out.println("mouse pressed"); 
       } 
       public void mouseClicked(MouseEvent e) 
       { 
       System.out.println("moused clicked"); 
       } 
       public void mouseReleased(MouseEvent e) 
       { 
       System.out.println("mouse released"); 
       } 
       public void mouseEntered(MouseEvent e) 
       { 
       System.out.println("mouse entered"); 
       } 
       public void mouseExited(MouseEvent e) 
       { 
       System.out.println("mouse exited"); 
       } 
       } 
       // MouseMotionHandler is an inner class that implements the MouseMotionListener. 
       // Each method simply prints out a message to the command line. 
       private class MouseMotionHandler implements MouseMotionListener 
       { 
       public void mouseMoved(MouseEvent e) 
       { 
       System.out.println("mouse moved"); 
       } 
       public void mouseDragged(MouseEvent e) 
       { 
       System.out.println("mouse dragged"); 
       } 
       } 
       public static void main(String[] args) 
       { 
       new MouseTest().show(); 
       } 
      }
      

  2.   


    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class MouseEvent2 extends JFrame{    private final JPanel panel=new JPanel();
        private final JButton button=new JButton("移动我");    public MouseEvent2(){
            super("焦点事件处理1");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            setBounds(0,0,600,400);
            getContentPane().add(panel);
            panel.add(button);
            Mouse1 mouse=new Mouse1();
            button.addMouseListener(mouse);
            button.addMouseMotionListener(mouse);
        }
        class Mouse1  implements MouseListener,MouseMotionListener{
            //private Point point1;
            private Point point2;
                  private Point point3;
            public void mousePressed(MouseEvent e){
                point3=e.getPoint();
            }
            public void mouseReleased(MouseEvent e){        }
            public void mouseClicked(MouseEvent e){        }
            public void mouseExited(MouseEvent e){        }        public void mouseEntered(MouseEvent e){        }            public void mouseDragged(MouseEvent e){
                point2=e.getPoint();
                button.setLocation(button.getX()+point2.x-point3.x,button.getY()+point2.y-point3.y);
            }            public void mouseMoved(MouseEvent e){        }
        }    public static void main(String[] args){
            new MouseEvent2().setVisible(true);
        }
    }
      

  3.   

    shibushi是不是那写错了 找不到 空指针 
      

  4.   

    说明一下你的错误:
    button.addMouseListener(new Mouse1());
    button.addMouseMotionListener(new Mouse1());
    你添加了两个监听器,可是你添加的时候都是用new Mouse1(),虽然是同一个类,但是是两个对象,真是太有意思了。也就是说,你监听一般操作的是一个对象,而监听移动拖动操作的是另一个对象。这样好了,你想想吧,程序肯定是有问题的吧。就算没有异常,也会有逻辑错误。然而,为什么会有异常呢?
    你的point2,point3都是以这种方式赋值的:
    point3=e.getPoint();
    可是,刚才已经说了,监听操作是两个对象。一个监听按下操作,一个监听拖动操作。
    而你监听拖动操作中有这么一句:
    button.setLocation(button.getX()+point2.x-point3.x,button.getY()+point2.y-point3.y);
    访问point3了。显然,这里面的point3是监听拖动操作的对象的成员point3。可是这个对象只监听拖动滴,也就是说它的point3根本没有被赋过值,其实是根本没有生成对象。按下操作时,设置的是另一个对象的point3。所以,point3是null,异常发生了
      

  5.   

    为什么拖动后的的组件定位是
    button.getX()+point2.x-point3.x,button.getY()+point2.y-point3.y
    直接point2不行吗?