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