每次创建一个类名为
的新对象时,我都会得到这个错误"无法实例化类型Main"
这是代码:
import javax.swing.*;
import java.util.Scanner;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Ellipse2D;
public abstract class Main extends JPanel implements ActionListener, KeyListener{
Timer t = new Timer(5, this);
double x = 0, y = 0, velX = 0, velY = 0;
public Main() {
t.start();
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.fill(new Ellipse2D.Double(x, y, 40, 40));
}
public void actionPerformed(ActionEvent e) {
repaint();
x += velX;
y += velY;
}
public void up() {
velY = -1.5;
velX = 0;
}
public void down() {
velY = -1.5;
velX = 0;
}
public void left() {
velX = -1.5;
velY = 0;
}
public void right() {
velX = -1.5;
velY = 0;
}
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if (code == KeyEvent.VK_UP) {
up();
}
if (code == KeyEvent.VK_DOWN) {
down();
}
if (code == KeyEvent.VK_LEFT) {
left();
}
if (code == KeyEvent.VK_RIGHT) {
right();
}
Main m = new Main();
JFrame f = new JFrame();
f.add(m);
f.setVisible(true);;
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(800,600);
}
public void keyTyped(KeyEvent e) {}
public void keyReleased(KeyEvent e) {}
}
这个对象总是得到"error"
Main m = new Main();
(我对制作UI非常非常陌生,事实上,这是我的第三个,所以我不知道为什么我不能实例化类型)
你不能在java中实例化抽象类,你的Main
类是抽象的,使它成为一个具体的类,因为它似乎你有所有的功能主义者,没有必要声明它为抽象类。
public class Main extends JPanel implements ActionListener, KeyListener { } //abstract keyword removed
如果下列任何语句适用于您的情况,请考虑使用抽象类:
- 你想在几个密切相关的类之间共享代码。
- 您希望扩展抽象类的类有许多方法或字段,或需要访问修饰符以外的公共的(如受保护的和私有的)。
- 你想声明非静态或非final字段。这使您能够定义可以访问和修改对象状态的方法
您的类Main是抽象的。不能实例化抽象类。
删除abstract关键字,并确保实现所有必要的方法
下一行就能解决你的问题
Main m = new Main(){};
代替
Main m = new Main();