0

次のような JFrame を作成する Java プログラムがあります。

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            gui.setFrame(new gui(), 1000, 300);
        }
    });

setFrame を実装するクラス (gui.java) もあります。

  public static void setFrame(final JFrame frame, final int width, final int height) {
 SwingUtilities.invokeLater(new Runnable() {
 public void run() {
   f1=frame;
 frame.setTitle("Testing");
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setSize(width, height);
 frame.setVisible(true);   
}
});
}

ユーザーが [送信] (私が作成したボタン) をクリックしようとして、JFrame のフィールドが入力されていない場合、エラーがスローされます。エラー メッセージのコードは次のとおりです。

     submit.addMouseListener(new MouseListener(){

@Override
public void mouseClicked(MouseEvent e) {}
@Override
public void mouseEntered(MouseEvent e) {}

@Override
public void mouseExited(MouseEvent e) {}

@Override
public void mousePressed(MouseEvent e) {}

@Override
public void mouseReleased(MouseEvent e) {
    //check to make sure all values filled in
          if(chooser.getSelectedFile().toString()!=null&&saveChooser.getSelectedFile().toString()!=null)
        parseFile.readFile(chooser.getSelectedFile(),saveChooser.getSelectedFile(),startSpanText.getText(),(String)col2.getSelectedItem(),(String)col3.getSelectedItem(),(String)col4.getSelectedItem(),(String)col5.getSelectedItem(),(String)col6.getSelectedItem());     
    else
        JOptionPane.showMessageDialog(f1,"Bad");
}

});

//注: f1 は、最初に受信したフレームの静的バージョンです

私が得るエラーは次のとおりです。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at gui$3.mouseReleased(gui.java:133)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

私は何を間違えましたか?

4

2 に答える 2

2

変数の 1 つが null です。かもしれない:

  • セレクター
  • chooser.getSelectedFile()
  • saveChooser
  • saveChooser.getSelectedFile()
  • 解析ファイル
  • startSpanText
  • col2 から col6

スタック トレースの行番号と、デバッガーまたはコードのトレースを使用して、どちらの行かを確認します。呼び出すのは意味がないので、私の推測では、選択されたファイルの 1 つになるでしょう。

chooser.getSelectedFile().toString() != null

getSelectedFile()選択されたファイルがなく、null を返すために NPE をスローするか、ファイルがあり、toString()決して null にならないかのいずれかです。

また、ボタンが押されたときに何かを行うためにマウス リスナーを使用しないでください。それが ActionListener の目的です。よりシンプルになり、ユーザーがキーボードでボタンを押したときにも機能します。

于 2013-01-04T23:37:05.713 に答える
0

例外メッセージは、答えを示しているはずです。メソッドで使用している項目の 1 つmouseReleasedが null です。

@Override
public void mouseReleased(MouseEvent e) {
  //check to make sure all values filled in
  if(chooser.getSelectedFile().toString()!=null && 
      saveChooser.getSelectedFile().toString()!=null)
    parseFile.readFile(chooser.getSelectedFile(), saveChooser.getSelectedFile(),
        startSpanText.getText(), (String)col2.getSelectedItem(), 
        (String)col3.getSelectedItem(), (String)col4.getSelectedItem(),
        (String)col5.getSelectedItem(), (String)col6.getSelectedItem());     
  else
    JOptionPane.showMessageDialog(f1,"Bad");
}

デバッガーを使用して、設定されている変数を調べます。例外メッセージの行番号を参考にしてください。

于 2013-01-04T23:36:00.927 に答える