编程语言
首页 > 编程语言> > java-没有包含实例错误

java-没有包含实例错误

作者:互联网

因此,我正在阅读一本Java书籍,并且已经开始使用此程序.但是,当我在Eclipse中使用它时,它为我提供了….错误的No Enclosing Instance.

对于为什么会出现此错误,我感到很困惑.这是我的代码:

我评论了给出错误的行

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) 
        {

        }
    }
}

如果有人能解释为什么我会收到此错误以及以后如何解决/避免它,将不胜感激.提前致谢!

解决方法:

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

Java有两种可以在类级别嵌套的内部类-静态和非静态.非静态类引用了其“外部”类的实例,并在其中实例化了这些实例.这允许非静态内部类访问其外部类的实例变量.静态类(例如HelloComponent2)不访问其外部类的实例变量.这使您可以从静态函数实例化此类.

使类成为静态应该可以解决问题:

static class HelloComponent2 extends JComponent implements MouseMotionListener

标签:jcomponent,compiler-errors,swing,mouse-listeners,java
来源: https://codeday.me/bug/20191030/1964475.html