"无法实例化Type Main"

SS1*_*149 3 java user-interface swing

每次使用类名创建一个新对象时,我都会收到此错误:

"无法实例化Type 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) {}

}
Run Code Online (Sandbox Code Playgroud)

这是持续得到这个"错误"的对象:

Main m = new Main();
Run Code Online (Sandbox Code Playgroud)

(我是非常非常新的UI,事实上,这是我的第3,所以我不知道为什么我不能实例化类型)

Abi*_*san 5

你不能在java中实例化抽象类,你的Main类是抽象的,使它成为一个具体的类,因为你似乎拥有所有的功能主义者而不需要将它声明为抽象类.

public class Main extends JPanel implements ActionListener, KeyListener { } //abstract keyword removed
Run Code Online (Sandbox Code Playgroud)

如果任何这些语句适用于您的情况,请考虑使用抽象类:

  • 您希望在几个密切相关的类之间共享代码.
  • 您希望扩展抽象类的类具有许多常用方法或字段,或者需要除公共之外的访问修饰符(例如protected和private).
  • 您想声明非静态或非最终字段.这使您可以定义可以访问和修改它们所属对象的状态的方法.