2016-11-02 3 views
0

musicplayer를 작성하고 있습니다. 모든 것이 완벽하게 작동했습니다. 하지만 JList을 내 두 번째에 추가하려고 시도했을 때 JPanel 모두 실패했습니다 .. 파일이 컴파일되고 명령 프롬프트에서 프로그램이 실행됩니다 ..하지만 생각지도 못했지만 프로그램이 표시되지 않습니다.Jframe이 (가) 더 이상 표시되지 않습니다.

비록 내가 window.setVisible(true); 보이는 선을 만지지는 않았지만.

누구든지 실수를 볼 수 있습니까? 난 당신이 클래스 프레임에 JFrame의 확장 사용하지 않았기 때문에이 발생할 수 있습니다 생각

/** 
* 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

'플레이어'클래스에는 무엇이 들어 있습니까? –

+0

오 .. 나는 Player를 놓쳤다. 나는 새로운 선수를 새로운 프레임으로 변경했다. 그리고 그것은 작동한다 .. 고마워. (: – Natalie

답변

0

:

는 코드입니다.

예 :

public class Frame extends JFrame{} 
+0

그래도 그 일은 해결되지 않았다. :하지만 고마워. – Natalie

0

클래스가 Player, Frame하지라고합니다.

이 교체 :

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

이유

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

으로이 어려운 예외가 발생되고 있으며, 당신이 그것을보고하지 않는 것입니다. try/catch "Exception"안에 새로운 Player() 호출을 래핑하여 결과를 출력하십시오. 이 직접 질문에 대답하지 않지만

, 그것은 이것은 당신이있을 때마다 확인하기 위해 기억해야 할 공통의 ​​일이 당신에게 해답을 줄 것이다 또한

:) 미래에 도움이 될 것입니다 비동기 적으로 작동하는 run() 유형의 메소드.

Java는 특정 로깅 기능을 강요하지 않지만 "기본"은 표준 오류 (System.err)에 예외 로깅을 기본값으로 지정합니다. 이것은 main 메소드의 동작 일 뿐이며 Java와는 아무런 관련이 없습니다! "Frame"(예 : JFrame이 아니라는 사실)에서 throw 된 예외는 invokeLater가 반환 될 때까지 발생하지 않습니다. 따라서 예외가 발생하기 전에 이미 종료되었으므로 main에서 물리적으로 예외를 처리 할 수 ​​없습니다. invokeLater는 코드가 실행되기 직전에 반환됩니다.)

run() 메서드를 벗어나는 스레드 예외를 실행하면 스레드 실행이 중지되고 스택 추적이 자동으로 소비됩니다. 쉽게 잡을 수있는 잡히지 않는 예외 처리기라는 개념이 있지만 기본적으로 아무것도 수행하지 않습니다.

일반적으로 비동기 예외를 처리해야합니다. 그렇지 않으면 완전히 숨김 상태가되고 스텔스 예외는 Java에서 개발자가 가장 많이 소비하는 것 중 하나입니다.

+0

알았어. 위의 내 의견에서 볼 수 있듯이 내가 잘못한 것을 발견했다. 어쨌든 try catch 예외를 구현하십시오. 귀하의 조언에 진심으로 감사드립니다. (: – Natalie

관련 문제