2014-10-09 3 views
0
package airlinep; 

/** 
* 
* 
*/ 
import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
public class NewClass1 extends JApplet{ 
JButton b1; 
    JButton b2; 

    JLabel lbl; 
    @Override 
    public void init() 
    { 
    try { 
     SwingUtilities.invokeAndWait(new Runnable() { 
      @Override 
      public void run(){ 
       guiInit();//throw new UnsupportedOperationException("Not supported yet."); 
      } 
     }); 
    } catch (Exception ex) { 
     System.out.println("could not generate due to "+ex.toString()); 
    } 
    } 

public void start() 
{} 
public void stop() 
{} 
public void destroy() 
{} 
private void guiInit() 
{ 
//setLayout(new FlowLayout()); 
b1.setText("b1"); 
b2.setText("b2"); 
b1.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     lbl.setText(b1.getText()+" was pressed at ");//To change body of generated methods, choose Tools | Templates. 
    } 
}); 
b2.addActionListener(new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent ae) { 
     lbl.setText(b2.getText()+" was pressed at ");//To change body of generated methods, choose Tools | Templates. 
    } 
}); 
getContentPane().add(b1); 
getContentPane().add(b2); 
getContentPane().add(lbl); 
} 
} 

프로그램이 넷빈에서 실행될 때 애플릿 창은 보이지만 GUI 요소는 buttons처럼 보이지 않으며 콘솔에서 try catch 블록에 의해 예외가 잡혔습니다. 이 예외가 발생하고 이것이 발생하지 않도록 내가 할 수있는 일.net-beans에서 실행할 때 "java.lang.reflect.InvocationTargetException"이 발생합니다. 왜 그런 일이 일어나는거야?

+2

변경'System.out을합니다. println ("+ ex.toString())으로 인해 생성 할 수 없습니다; 'to'ex.printStackTrace ();'전체 추적을보고합니다. –

+0

@Andrew Thompson AFAIK SwingUtilities.invokeAndWait을 (J) 애플릿에 사용할 수 없습니다. 틀렸을 수도 있습니다 ... – mKorbel

+3

@mKorbel * "SwingUtilities.invokeAndWait을 (J) 애플릿에 사용할 수 없습니다. , .. "* 실제로 ** 애플릿에서 그렇게해야합니다. 'invokeLater (..)'를 사용하면'init()'액션이 완료되기 전에'start()'가 호출 될 위험이 있습니다. –

답변

2

예외를 올바르게 catch하지 않아 보이지 않는 NullPointerException이 발생했습니다.을 사용하기 전에 JButton 및 JLabel 변수 을 포함하여 참조 변수에 객체를 할당해야합니다. 즉

, 또한 누락 된 타겟 예외를 캡처

JButton b1; 
JButton b2; 

JLabel lbl; 


JButton b1 = new JButton("something"); 
JButton b2 = new JButton("something else"); 

JLabel lbl = new JLabel("something else entirely"); 

에 변경하고 고려 :

try { 
    SwingUtilities.invokeAndWait(new Runnable() { 
     @Override 
     public void run() { 
      guiInit(); 
     } 
    }); 
    } catch (InvocationTargetException e) { 
    e.getTargetException().printStackTrace(); // get the target exception 
    } catch (InterruptedException e) { 
    e.printStackTrace(); 
    }