0

だから、私;チュートリアルに従っていて、正確にそれに従いましたが、テストすると、

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();
}
}

このコードは、白い背景に静止画像を表示することを目的としていますが、エラーがスローされるか、透明な背景が表示されます。その後、バグが発生し、私を悩ませます。:(何が間違っているのですか????

4

2 に答える 2

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();
}

編集

あなたは今2つのことをすることができます。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();
}
于 2012-06-02T06:07:32.890 に答える
1

通常、カスタム コンストラクターを定義しない場合、コンパイラは、引数を一切取らない既定のコンストラクターを追加します。

カスタム コンストラクターがあるためMain(Color white)(代わりにパラメーターに「color」という名前を付けることをお勧めします。任意の色を割り当てることができます)、これがMainクラス内の唯一のコンストラクターです。Color objectそのため、 as 引数を指定してカスタム コンストラクターを呼び出す必要があります。

于 2012-06-02T06:11:49.210 に答える