2016-05-16 8 views
0

非常に単純に、私はこのイメージを描くことができませんでした。`Graphics.drawImage()`は描画しません

public class RenderMap extends JPanel { 

    static BufferedImage brick; 
    static BufferedImage groundb; 

    public static void main(String[] args) { 
     JFrame window = new JFrame("Super Mario"); 
     RenderMap content = new RenderMap(); 
     window.setContentPane(content); 
     window.setBackground(Color.WHITE); 
     window.setSize(1200, 800); 
     window.setLocation(100,0); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setResizable(false); 
     window.setVisible(true); 

     try { 
      brick = ImageIO.read(new File("SuperMario/brick.png")); 
     } catch (IOException e) { 
     } 

     try { 
      URL url = new URL("SuperMario/brick.png"); 
      brick = ImageIO.read(url); 
     } catch (IOException e) { 
     } 
     try { 
      groundb = ImageIO.read(new File("SuperMario/ground.png")); 
     } catch (IOException e) { 
     } 
     try { 
      URL url = new URL("SuperMario/ground.png"); 
      groundb = ImageIO.read(url); 
     } catch (IOException e) { 
     } 
    } 

    public Ground ground; 

    public RenderMap() {} 

    public void paintComponent(Graphics g) { 

     if(ground == null) { 
      ground = new Ground(); 
     } 
     ground.draw(g); 
    } 

    public class Ground implements ImageObserver { 

     Ground(){} 

     void draw(Graphics g) { 
      g.drawImage(groundb, 0, 0, 1200, 800, this); 
      g.fillOval(8, 8, 16, 16); 
     } 

     @Override 
     public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) { 
      // TODO Auto-generated method stub 
      return false; 
     } 
    } 
} 

これは、楕円を描画しますが、イメージは描画しません。私は(別のプログラムで動作している)別のイメージに変更しようとしましたが、それでも動作しませんので、イメージの問題ではありません。

+0

おい、これは学校からのあなたの宿題のようです!とにかく、画像を '.read()'したときに 'IOException'がスローされているかどうかを調べることができます。 'catch'ブロックは全て空白なので、イメージファイルのロードに成功したかどうかはわかりません。 –

+0

@lanthe:私はそれが宿題ではないと思います - フォルダはSuperMarioという名前です:) @chris:キャッチブロックでe.printStackTrace()を試してみましょう。 – chris

+0

@lanthe:はい、学校のプロジェクトです! –

答えて

0

画像が正しく読み込まれていない可能性があります。

java.net.MalformedURLException: no protocol: SuperMario/brick.png 
at java.net.URL.<init>(URL.java:586) 
at java.net.URL.<init>(URL.java:483) 
at java.net.URL.<init>(URL.java:432) 
at RenderMap.main(RenderMap.java:40) 

java.net.MalformedURLException: no protocol: SuperMario/ground.png 
at java.net.URL.<init>(URL.java:586) 
at java.net.URL.<init>(URL.java:483) 
at java.net.URL.<init>(URL.java:432) 
at RenderMap.main(RenderMap.java:51) 

無効なURLを渡したために、load-by-URL関数呼び出しで失敗しています。正しいURL形式は、次のようなWebブラウザからのアクセス方法と同じでなければなりません。http://someplace.com/SuperMarioFolder/brick.png

画像を読み込むには、読み込む方法を1つだけ選択します。いずれかの方法で:

  1. URL - Fileブロックを削除し、完全なURLを経由してファイルにアクセスできるようにします。

    try { 
        URL url = new URL("http://www.proper-url.com/SuperMario/ground.png"); 
        groundb = ImageIO.read(url); 
    } catch (IOException e) { } 
    
  2. File - URLブロックを削除します。これにより、プログラムはローカルファイルにしかアクセスできません。プロジェクトの目的のために

    try { 
        groundb = ImageIO.read(new File("SuperMario/ground.png")); 
    } catch (IOException e) { 
    } 
    

、私はオプション#2が十分であろうと信じています。

今後、IDEのデバッグ機能を使用してコード実行を段階的に進めることができます。あなたが1つを使用していない場合は、IntelliJEclipseがあります。

+0

@lanthe:URLを削除しましたが、まだ実行されません。 PSは、e.printStackTrace()で追加した後にエラーを返さない。{ \t \t \t \t brick = ImageIO.read(新しいファイル( "SuperMario/brick.png")); \t \t \t}キャッチ(のIOExceptionのE1){ \t \t \t \t // TODO自動生成されたcatchブロック \t \t \t \t e1.printStackTrace()。 \t \t \t} 試み{\t \t \t \t groundb = ImageIO.read(新しいファイル( "スーパーマリオ/ ground.png")); \t \t \t}キャッチ(IOExceptionを電子){ \t \t \t \t // TODO自動生成されたcatchブロック \t \t \t \t e.printStackTrace(); \t \t \t} –

+0

IOExceptionがスローされていない場合は正常です。つまり、ファイルを読み取ることができます。とにかく、ファイルパスを 'C:/ test/SuperMario/ground.png'のような完全なファイルパスに変更しようとしますか? –

+0

@lantheありがとう、私は問題を発見し、それを解決し、私はpaintComponentメソッドでrepaint()を追加することを忘れていました:p –

関連する問題