2017-01-26 7 views
-1

私はグラフィックスを使用して画面上に画像を表示しようとしていますが、画面は黒い画面を出力画面が表示されますJava出力画面の取得方法は?

読み込むだけで表示されません。また、画像

コードが正しくなぜだコンパイルしません私は...

package game; 

import java.awt.*; 
import javax.swing.JFrame; 

public class Screen { 
    private GraphicsDevice vc; 

    public Screen(){ 
     GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
     vc=env.getDefaultScreenDevice(); 
    } 

    public void setFullScreen(DisplayMode dm, JFrame window){ 
     window.setUndecorated(true); 
     window.setResizable(false); 
     vc.setFullScreenWindow(window); 

     if(dm !=null && vc.isDisplayChangeSupported()){ 
      try{ 
       vc.setDisplayMode(dm); 
      }catch(Exception ex){} 
     } 
    } 

    public Window getFullSCreenWindow(){ 
     return vc.getFullScreenWindow(); 
    } 

    public void resotreScreen(){ 
     Window w= vc.getFullScreenWindow(); 
     if(w!=null){ 
      w.dispose(); 
     } 
     vc.setFullScreenWindow(null); 
    } 


} 



package game; 

import java.awt.*; 
import javax.swing.ImageIcon; 

import javax.swing.JFrame; 

class Images extends JFrame{ 
    public static void main(String[] args){ 
     DisplayMode dm = new DisplayMode(800,600,16,DisplayMode.REFRESH_RATE_UNKNOWN); 

     Images i = new Images(); 
     i.run(dm); 

    } 

    private Screen s; 
    private Image bg; 
    private Image pic; 
    private boolean loaded; 
    public void run(DisplayMode dm){ 
     setBackground(Color.BLUE); 
     setForeground(Color.WHITE); 
     setFont(new Font("Arial",Font.PLAIN,24)); 

     loaded =false; 

     s = new Screen(); 

     try{ 
      s.setFullScreen(dm, this); 
      loadpics(); 
      try{ 
       Thread.sleep(10000); 
      }catch(Exception ex){} 
     }finally{ 
       s.resotreScreen(); 
     } 

    } 

    public void loadpics(){ 
     bg = new ImageIcon("C:\\Users\\Dhruv\\Downloads\\Ronaldo.jpg").getImage(); 
     pic =new ImageIcon("C:\\Users\\Dhruv\\Downloads\\Messi.jpg").getImage(); 

     loaded= true; 
     repaint(); 
    } 
    public void paint(Graphics g){ 
     if(g instanceof Graphics2D){ 
      Graphics2D g2 =(Graphics2D)g; 
      g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON); 
     } 

     if(loaded){ 
      g.drawImage(bg,0,0,null); 
      g.drawImage(pic,170,180,null); 
     } 

    } 
} 
+0

[カスタム・ペイントの実行](http://docs.oracle.com/javase/tutorial/uiswing/painting/)と[AWTとスイングのペイント](http://www.oracle.com/)から始めてください。 .com/technetwork/java/painting-140037.html)を参照してください。ヒント、トップレベルコンテナの 'paint 'をオーバーライドしないでください。 – MadProgrammer

+0

' Thread.sleep(10000);は、UIが描画されないようにする能力があるため、無意味です。 – MadProgrammer

+0

私が提案しているのは、フルスクリーンモードを心配しないで、通常のウィンドウで最初に動作させてから、フルスクリーンサポートを実装することです。 – MadProgrammer

答えて

2

はのは、背景情報を見てみましょう0123が含まれていJRootPaneための容器、

JFrameを出力している得ていません、JMenuBar

RootPane

あなたはJFrameのようなトップレベルのコンテナのpaintを上書きJGlassPane、あなただけの、JRootPaneを下のほとんどのコンポーネントをペイントしているし、それは一種のそれを作る、内容はその後、トップの上に描かれているのです無意味な

絵画は実際にそれがどのように動作するかを理解し、問題の終わりを引き起こさないでしょうsuper.paintを呼び出して、あなたはいつもあなたがない限り塗装の前にスーパーpaintメソッドを呼び出すことを確認することができない、また、複雑な操作です詳細はHow to Use Root Panesを参照してください。それを手動で行う準備ができています。 Swingで

あなたが代わりにJComponentベースクラス(JPanelが好まれて)から延び、このコンポーネントは、いずれかのウィンドウに追加されるかのように設定することができ、そのpaintComponentメソッドをオーバーライドして、そこ

をカスタムペイントを実行することをお勧めしますcontentPaneか、必要に応じて他のコンテナに追加してください。

詳細はPainting in AWT and SwingおよびPerforming Custom Paintingを参照してください。

ImageIconはバックグラウンドスレッドを使用してイメージをロードします。したがって、戻ってもイメージが実現されない可能性があります。 を使用してnullImageObserverとして渡すと、画像が変更されたときにコンテナが認識して自動的に再描画されることを防ぐことができます。

すべてのComponentクラスにはImageObserverが実装されているので、塗装できるものはほとんどImageObserverとして機能します。

このコンベンションではthisImageObserverとしてください。

一般的に、より良い解決策は画像を読み込むときに画像が完全に実現されるまで戻らないImageIOです。

詳しくはReading/Loading an Imageをご覧ください。

Thread.sleep(10000);は、スイングでは危険なものです。 UIの更新を停止したり、他の入力やイベントに応答したりすることで、プログラムがハングアップしているように見せかける可能性があります。しかし、あなたの場合、スイングのシングルスレッドルールに違反していることを意味します。

スイングは単一のスレッド環境であるため、イベントディスパッチスレッドをブロックする可能性のあるアクションは実行しないでください。また、EDTのコンテキスト外からUIを更新しないでください。

EDTにディスパッチされる定期イベントを生成するSwing Timerと、UIの更新をサポートする長時間実行される操作を実行するためのSwingWorkerがあります。

詳細はThe Event Dispatch Threadを参照してください。

私の推奨するのは、全画面のサポートについて心配することではなく、通常のウィンドウを使用して画像をペイントすることに焦点を当て、フルスクリーンサポートを追加することです。これにより、分離された機能セット内の問題を解決でき、解決しやすくなります。

+0

ああ、驚き、まだ別の迷惑なdownvoteは、新しい答えとして提供されていないとして、新しいdownvotesやクローズ票は、質問に対して行われていないと、私はあなただけの個人嫌いあなたが私の答えが客観的であると思われる理由について何か助けを与えることができない限り、私は何も変わらないでしょう – MadProgrammer