否包含实例错误

时间:2014-01-09 17:50:18

标签: java swing compiler-errors jcomponent mouse-listeners

所以我正在阅读一本Java书,我来参加这个项目。但是,当我在Eclipse中使用它时,它会给我一个类型为No Enclosing Instance .... error

我对这个错误弹出的原因感到非常困惑。这是我的代码:

我评论了提供错误的行

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class HelloJava2 
{
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Hello, Java2!");
        /*
        HelloComponent2 newObject = new HelloComponent2("Hello, Java!");
        */
        frame.add(newObject);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setVisible(true);

    }

    class HelloComponent2 extends JComponent implements MouseMotionListener
    {
        String theMessage;
        int messageX = 125, messageY = 95;

        public HelloComponent2(String message)
        {
            theMessage = message;
            addMouseMotionListener(this);
        }

        public void paintComponent( Graphics g )
        {
            g.drawString( theMessage, messageX, messageY);
        }

        public void mouseDragged(MouseEvent e)
        {
            messageX = e.getX();
            messageY = e.getY();

            repaint();
        }

        public void mouseMoved(MouseEvent e) 
        {

        }
    }
}

如果有人能解释为什么我会收到此错误以及如何在将来修复/避免它,我将不胜感激。提前谢谢!

1 个答案:

答案 0 :(得分:4)

这是因为您尝试从静态方法实例化非静态内部类。

Java有两种可以嵌套在类级别的内部类 - 静态和非静态。非静态类引用其"外部"的实例。 class,在其中实例化它们。这允许非静态内部类访问其外部类的实例变量。静态类(例如HelloComponent2)不访问其外部类的实例变量。这允许您从静态函数中实例化这些类。

制作课程static应解决问题:

static class HelloComponent2 extends JComponent implements MouseMotionListener