2016-11-02 6 views
0

私はmusicplayerを構築していました。すべてが完璧に機能しました。しかし、私がJListを私の2番目のJPanelに追加しようとすると、すべてが失敗しました..ファイルはコンパイルされ、コマンドプロンプトでプログラムが実行されます..私は思う..しかし、プログラムは表示されません。Jframeはすっかりもう可視ではありません

私はwindow.setVisible(true);の可視線に触れていませんが。

誰かが間違いを見ることができますか?

/** 
* Created by Natalie89dk on 02-11-2016. 
*/ 
import javax.swing.*; 
import java.awt.*; 

public class Frame { 

    public Frame(){ 
     JFrame window = new JFrame(); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setTitle("Player"); 
     window.setBounds(200, 10, 500, 300); 
     window.setLayout(new BorderLayout()); 
     window.setVisible(true); 

     JPanel playlistList = new JPanel(new GridBagLayout()); 
     playlistList.setBackground(Color.GRAY); 
     window.add(playlistList, BorderLayout.WEST); 

     GridBagConstraints contain1 = new GridBagConstraints(); 
     JLabel label11 = new JLabel("Playlists"); 
     contain1.gridx = 0; 
     contain1.gridy = 0; 
     contain1.insets = new Insets(10, 10, 10, 10); 
     playlistList.add(label11, contain1); 

     JButton createPlaylist = new JButton(); 
     createPlaylist.setText("Create playlist"); 
     contain1.gridx = 0; 
     contain1.gridy = 1; 
     contain1.insets = new Insets(10, 10, 10, 10); 
     playlistList.add(createPlaylist, contain1); 

     DefaultListModel<String> listModel = new DefaultListModel<String>(); 
     JList<String> list = new JList<String>(listModel); 
     contain1.gridx = 0; 
     contain1.gridy = 2; 
     contain1.insets = new Insets(10, 10, 10, 10); 
     playlistList.add(list, contain1); 

     String playlist1 = "Playlist1"; 
     String playlist2 = "Playlist2"; 
     String playlist3 = "Playlist3"; 
     String playlist4 = "Playlist4"; 
     String playlist5 = "Playlist5"; 
     String playlist6 = "Playlist6"; 
     String playlist7 = "Playlist7"; 
     String playlist8 = "Playlist8"; 
     String playlist9 = "Playlist9"; 
     String playlist10 = "Playlist10"; 
     String playlist11 = "Playlist11"; 
     String playlist12 = "Playlist12"; 

     listModel.addElement(playlist1); 
     listModel.addElement(playlist2); 
     listModel.addElement(playlist3); 
     listModel.addElement(playlist4); 
     listModel.addElement(playlist5); 
     listModel.addElement(playlist6); 
     listModel.addElement(playlist7); 
     listModel.addElement(playlist8); 
     listModel.addElement(playlist9); 
     listModel.addElement(playlist10); 
     listModel.addElement(playlist11); 
     listModel.addElement(playlist12); 

     JScrollPane scrollPane = new JScrollPane(list); 
     //scrollPane.setViewportView(list); 
     contain1.gridx = 0; 
     contain1.gridy = 3; 
     contain1.insets = new Insets(10, 10, 10, 10); 
     playlistList.add(scrollPane, contain1); 

     JPanel currentPlaylist = new JPanel(new GridBagLayout()); 
     currentPlaylist.setBackground(Color.GRAY); 
     window.add(currentPlaylist, BorderLayout.EAST); 

     GridBagConstraints contain = new GridBagConstraints(); 

     JLabel label12 = new JLabel("Playing playlist"); 
     contain.gridx = 0; 
     contain.gridy = 0; 
     contain.insets = new Insets(10, 10, 10, 10); 
     currentPlaylist.add(label12, contain); 

     JButton addTrack = new JButton(); 
     //addTrack.setSize(new Dimension(100, 30)); 
     addTrack.setText("Add Track"); 
     // window.add(addTrack, BorderLayout.EAST); 
     contain.gridx = 0; 
     contain.gridy = 1; 
     contain.insets = new Insets(10, 4, 10, 10); 
     currentPlaylist.add(addTrack, contain); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new Player(); 
      } 
     }); 
    } 
} 
+0

'Player'クラスには何が含まれていますか? –

+0

ああ..私はPlayerを逃した。新しいPlayerを新しいFrameに変更したばかりだ。 (: – Natalie

答えて

0

私はあなたがクラスフレーム上のJFrameを拡張を使用していないので、それが原因かもしれないと思う:

これはコードです。

例:

public class Frame extends JFrame{} 
+0

ちょっとやったけど、それは解決しませんでした。(でも、ありがとう) – Natalie

0

あなたのクラスはPlayerFrameないと呼ばれています。

これを置き換えます

    @Override 
        public void run() { 
         new Player(); 
        } 

理由

    @Override 
        public void run() { 
         new Frame(); 
        } 
1

でこれが困難な例外がスローされており、あなたはそれを見ていないことです。 try/catchの "Exception"内でnew Player()への呼び出しをラップし、結果を出力してください。

これは直接、それはあなたに答えを与えるだろうし、また、将来的にあなたを助ける、あなたの質問に答えていませんが:)

これはあなたが持っている時はいつでもチェックするために覚えておく必要が一般的なものです非同期で動作するメソッドのrun()型。

Javaでは、特定のロギング機能を使用する必要はありませんが、「メイン」では標準エラー(System.err)に例外が記録されます。これは、メインメソッドの動作のみであり、Javaとは何の関係もありません。 「Frame」からスローされた例外(JFrameではないなど)は、invokeLaterが返されるまで発生しません。つまり、メインが物理的に例外を処理できないため、例外が発生する前に既に終了していますinvokeLaterは、コードが実行される直前に戻ります)。

run()メソッドをエスケープするスレッド例外を実行すると、スレッドの実行が停止し、スタックトレースが静かに消費されます。ジョブを簡単に実行できる未知の例外ハンドラという概念がありますが、デフォルトでは何もしません。

あなたは一般的に、非同期例外を自分で処理する必要があります。そうしないと、完全に隠密になり、ステルス例外はJavaの開発者にとって最も時間がかかるものの1つになります。

+0

私は間違ったことを見つけました。私のコメントで分かりましたが、とにかくtry catch例外を実装してください。ありがとうございます。 – Natalie

関連する問題