所以,我跟随一个教程,我完全遵循它,但是当我测试时,它会抛出一个
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - constructor Main in class spritesheet.Main cannot be applied to given types;
required: java.awt.Color
found: no arguments
reason: actual and formal argument lists differ in length
at spritesheet.Main.main(Main.java:48)
Java Result: 1
错误!
这是我的代码:
package spritesheet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFrame;
public class Main extends JFrame {
BufferedImage sprite;
private final Color Color;
public Main(Color white){
setSize(800, 600);
setVisible(true);
setResizable(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setBackground(Color=white);
init();
}
private void init(){
BufferedImageLoader loader = new BufferedImageLoader();
BufferedImage spriteSheet = null;
try {
spriteSheet = loader.loadImage("spritesheet.png");
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
SpriteSheet ss = new SpriteSheet(spriteSheet);
sprite = ss.grabSprite(0, 0, 16, 16);
}
@Override
public void paint(Graphics g){
g.drawImage(sprite, 100, 100, null);
repaint();
}
public static void main(String[] args) {
Main Main = new Main();
}
}
此代码旨在在白色背景上显示静止图像,但它会抛出错误或显示透明背景。然后它就会惹恼我并使我烦恼。 :( 我做错了什么????
答案 0 :(得分:1)
你这样打电话给你的班级
Main Main = new Main();
但是您需要将参数传递给它,因为您将其定义为
public Main(Color white) { ... }
您可以将其更改为
Main Main = new Main(Color.WHITE);
和
public Main(Color c) {
setSize(800, 600);
setVisible(true);
setResizable(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
Color = c;
setBackground(Color);
init();
}
你现在可以做两件事。将Color
变量static
设为这样:
private static Color Color;
或将您的Main
构造函数更改为
public Main() {
setSize(800, 600);
setVisible(true);
setResizable(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
Color = Color.WHITE;
setBackground(Color);
init();
}
答案 1 :(得分:1)
通常,如果您没有定义任何自定义构造函数,编译器将添加一个不接受任何参数的默认构造函数。
由于您有自定义构造函数Main(Color white)
(我建议您将参数命名为“color” - 可以指定任何颜色),这是Main
类中唯一的构造函数。因此,您必须通过提供Color object
作为参数来调用自定义构造函数。