所以我正在阅读一本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)
{
}
}
}
如果有人能解释为什么我会收到此错误以及如何在将来修复/避免它,我将不胜感激。提前谢谢!
答案 0 :(得分:4)
这是因为您尝试从静态方法实例化非静态内部类。
Java有两种可以嵌套在类级别的内部类 - 静态和非静态。非静态类引用其"外部"的实例。 class,在其中实例化它们。这允许非静态内部类访问其外部类的实例变量。静态类(例如HelloComponent2
)不访问其外部类的实例变量。这允许您从静态函数中实例化这些类。
制作课程static
应解决问题:
static class HelloComponent2 extends JComponent implements MouseMotionListener