2017-06-22 18 views
-3

ファイアウォールゾーン内でSwingでJavaを使用してWebsphere MQコンテンツを取得するユーティリティを作成しました。なぜなら、どこに欠陥があるのか​​わからないからです。離れて冗長部分からコード:Javaアクションでコマンドが2回実行されている

 package testbox; 

     import java.awt.GridBagConstraints; 
     import java.awt.GridBagLayout; 
     import java.awt.GridLayout; 
     import java.awt.Insets; 
     import java.awt.event.ActionEvent; 
     import java.awt.event.ActionListener; 

     import javax.swing.JButton; 
     import javax.swing.JFrame; 
     import javax.swing.JLabel; 
     import javax.swing.JOptionPane; 
     import javax.swing.JPanel; 
     import javax.swing.JPasswordField; 
     import javax.swing.JScrollPane; 
     import javax.swing.JTabbedPane; 
     import javax.swing.JTextArea; 
     import javax.swing.JTextField; 
     import javax.swing.SwingUtilities; 

     @SuppressWarnings("serial") 
     public class MainFrame extends JFrame implements ActionListener 
     { 
      JLabel lblqname = new JLabel("Please enter the queue name");  
      JTextField txtqname = new JTextField(25);      
      JLabel lblqcur = new JLabel("where curdeth greater than");  
      JTextField txtqcurdfil = new JTextField(5);      

      JLabel lblchlname = new JLabel("Please enter the Channel name"); 
      JTextField txtchlname = new JTextField(30);  
      JLabel lblchs = new JLabel("where status is: "); 
      JTextField txtchs = new JTextField(8);  

      public String ID; 
      public String pwdValue; 

      public String qname;  
      public int cdepth; 

      public String chlname; 
      public String chlstatus; 

      public String cmdissue; 

      JTextArea out = new JTextArea(); 

      JButton QMGR1 = new JButton("QMGR1"); 
      JButton QMGR2 = new JButton("QMGR2"); 


      public MainFrame() 
      { 
       JLabel jUserName = new JLabel("ID"); 
       JTextField userName = new JTextField(); 
       JLabel jPassword = new JLabel("Password"); 
       JTextField password = new JPasswordField(); 
       Object[] ob = {jUserName, userName, jPassword, password}; 
       int result = JOptionPane.showConfirmDialog(null, ob, "Please input password for Login", JOptionPane.OK_CANCEL_OPTION); 

       if (result == JOptionPane.OK_OPTION) 
       { 
        ID = userName.getText(); 
        pwdValue = password.getText(); 

       final JFrame frame = new JFrame("Environment Choice"); 
       frame.setSize(500, 400); 
       frame.setVisible(true); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.getContentPane().setLayout(new GridLayout(1, 1)); 
       JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); 

       tabbedPane.addTab("QAQmgrList", makeQAPanel()); 

       frame.getContentPane().add(tabbedPane); 
       } 

      } 

      public JPanel makeQAPanel() 
      { 
       JPanel p = new JPanel(); 
       p.setLayout(new GridBagLayout()); 

       GridBagConstraints gbc_QMGR1 = new GridBagConstraints(); 
       gbc_QMGR1.insets = new Insets(0, 0, 5, 5); 
       gbc_QMGR1.gridx = 1; 
       gbc_QMGR1.gridy = 1; 
       p.add(QMGR1, gbc_QMGR1);     
       QMGR1.addActionListener(this); 


       GridBagConstraints gbc_QMGR2 = new GridBagConstraints(); 
       gbc_QMGR2.insets = new Insets(0, 0, 5, 5); 
       gbc_QMGR2.gridx = 1; 
       gbc_QMGR2.gridy = 2; 
       p.add(QMGR2, gbc_QMGR2);   
       QMGR2.addActionListener(this); 


       return p; 
      } 

      public void createSubframe() 
      { 
       final JFrame subframe = new JFrame("Object Choice"); 
       subframe.setSize(1000, 500);   
       subframe.getContentPane().setLayout(new GridLayout(1, 1)); 
       out.setText(null);  
       out.setLineWrap(true); 
       out.setCaretPosition(out.getDocument().getLength()); 
       out.setEditable (false); 
       JScrollPane jp = new JScrollPane(out); 
       jp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
       jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 

       JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); 

       JPanel queue = new JPanel(); 

       queue.add(lblqname); 
       txtqname.setText(null); 
       queue.add(txtqname);   
       queue.add(lblqcur); 
       txtqcurdfil.setText(null); 
       queue.add(txtqcurdfil);  

       txtqname.addActionListener(this); 
       txtqcurdfil.addActionListener(this); 

       JPanel chl = new JPanel(); 

       chl.add(lblchlname); 
       txtchlname.setText(null); 
       chl.add(txtchlname); 
       chl.add(lblchs); 
       txtchs.setText(null); 
       chl.add(txtchs); 

       txtchlname.addActionListener(this); 
       txtchs.addActionListener(this); 


       tabbedPane.addTab("Queues", queue); 
       tabbedPane.addTab("Channels", chl);  
       subframe.getContentPane().add(tabbedPane); 
       subframe.getContentPane().add(jp); 
       tabbedPane.setVisible(true); 
       subframe.setVisible(true);  
      } 

      public static void main(String[] args) 
      {SwingUtilities.invokeLater(new Runnable(){ public void run() { @SuppressWarnings("unused") MainFrame m = new MainFrame();}});} 

      @Override 
      public void actionPerformed(ActionEvent e) 
      {    
       if (e.getSource() == QMGR1|| e.getSource() == QMGR2) 
       {createSubframe();}  

       if (e.getSource() == txtqname){qname = txtqname.getText();} 

       if (e.getSource() == txtqcurdfil) 
       { 
        cdepth = Integer.parseInt(txtqcurdfil.getText());  
        cmdissue = "qn has value messages"; 
        cmdissue = cmdissue.replace("qn", ""+qname+""); 
        cmdissue = cmdissue.replace("value", ""+cdepth+""); 
        System.out.println(cmdissue); 
        cmdissue = null; 
       } 

       if (e.getSource() == txtchlname){chlname = txtchlname.getText(); chlname=null;} 

       if (e.getSource() == txtchs) 
       { 
        chlstatus = txtchs.getText(); 
        cmdissue = "chln is chls"; 
        cmdissue = cmdissue.replace("chln", ""+chlname+""); 
        cmdissue = cmdissue.replace("chls", ""+chlstatus+""); 
        System.out.println(cmdissue); 
       }     
      } 
     } 

私はコードのために期待される結果を取得しています: Running for first time

は、私は私が作るかかわらず、その選択肢の、このオブジェクトの選択]パネルを閉じ、新しいインスタンスを開くと言いますコマンドは2回実行されます。 Running for the second time

繰り返しが繰り返されます。私が4番目か5番目の時間を選択すると、コマンドは4/5回実行されます。

何とか私はそれを実行する回数だけオブジェクトを初期化していることを理解しました。パネルを閉じた後にリセットする必要があります。しかし、私はどのように/これを行うにはわからない。

私は人々がコミットされた間違いを指摘できるようにしたいと思っていたので、長いコードの投稿にはお詫び申し上げます。

+0

それを指摘してくれてありがとうは、変数の命名部に即興ます。..魅力のように働きました。一方、あなたがコメントに投稿した最後の2つの変数名を削除することができます... 私も自分のコードから削除しました。その機密情報以来 –

+0

私のコメントをもう編集できませんでしたので、私はそれを削除しました。 – Jesper

+0

@jesper much obliged –

答えて

0
GridBagConstraints gbc_QMGR1 = new GridBagConstraints(); 
gbc_QMGR1.insets = new Insets(0, 0, 5, 5); 
gbc_QMGR1.gridx = 1; 
gbc_QMGR1.gridy = 1; 
p.add(QMGR1, gbc_QMGR1);     
QMGR1.addActionListener(this); 


GridBagConstraints gbc_QMGR1 = new GridBagConstraints(); 
gbc_QMGR1.insets = new Insets(0, 0, 5, 5); 
gbc_QMGR1.gridx = 1; 
gbc_QMGR1.gridy = 2; 
p.add(QMGR1, gbc_QMGR1);   
QMGR1.addActionListener(this); 

2つの異なるグリッド位置に同じコンポーネントをパネルに2回追加しようとしているようです。あなたはこれをすることはできません。

あなたがする必要がある:

  1. は、二つの異なるコンポーネントを作成、または
  2. は、構成要素の一つを取り除きます。

編集:

 JButton QMGR1 = new JButton("QMGR1"); 
     JButton QMGR2 = new JButton("QMGR2"); 

あなたはインスタンス変数としてボタンを作成します。

しかし、makeQAPanel()メソッドでは、ボタンにactionListenerを追加します。

QMGR1.addActionListener(this); 

... 

QMGR2.addActionListener(this); 

したがって、そのメソッドを呼び出すたびに、actionListenerが再度追加されます。

actionListenerは、あなたのクラスのコンストラクタに追加する必要がありますので、一度だけ追加されます。

+0

この投稿には誤字があります。元のsrcコードにはこれとは異なる値があります。ここで編集します –

+0

@flunkedutopian、編集を参照してください。 – camickr

+0

パーフェクト1、私は4時間で結果を投稿します。 –

0

@jesper、

誰かが私にそれのコンストラクタ一部説明:

パッケージをtestbox。

import java.awt.GridBagConstraints; 
    import java.awt.GridBagLayout; 
    import java.awt.GridLayout; 
    import java.awt.Insets; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 

    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JOptionPane; 
    import javax.swing.JPanel; 
    import javax.swing.JPasswordField; 
    import javax.swing.JScrollPane; 
    import javax.swing.JTabbedPane; 
    import javax.swing.JTextArea; 
    import javax.swing.JTextField; 
    import javax.swing.SwingUtilities; 

    @SuppressWarnings("serial") 
    public class MainFrame extends JFrame implements ActionListener 
    { 
     JLabel lblqname = new JLabel("Please enter the queue name");  
     JTextField txtqname = new JTextField(25);      
     JLabel lblqcur = new JLabel("where curdeth greater than");  
     JTextField txtqcurdfil = new JTextField(5);      

     JLabel lblchlname = new JLabel("Please enter the Channel name"); 
     JTextField txtchlname = new JTextField(30);  
     JLabel lblchs = new JLabel("where status is: "); 
     JTextField txtchs = new JTextField(8);  

     public String ID; 
     public String pwdValue; 

     public String qname;  
     public int cdepth; 

     public String chlname; 
     public String chlstatus; 

     public String cmdissue; 

     JTextArea out = new JTextArea(); 

     JButton QMGR1 = new JButton("QMGR1"); 
     JButton QMGR2 = new JButton("QMGR2"); 


     public MainFrame() 
     { 
      QMGR1.addActionListener(this); 
      QMGR2.addActionListener(this); 
      txtqname.addActionListener(this); 
      txtqcurdfil.addActionListener(this); 
      txtchlname.addActionListener(this); 
      txtchs.addActionListener(this); 


      JLabel jUserName = new JLabel("ID"); 
      JTextField userName = new JTextField(); 
      JLabel jPassword = new JLabel("Password"); 
      JTextField password = new JPasswordField(); 
      Object[] ob = {jUserName, userName, jPassword, password}; 
      int result = JOptionPane.showConfirmDialog(null, ob, "Please input password for Login", JOptionPane.OK_CANCEL_OPTION); 

      if (result == JOptionPane.OK_OPTION) 
      { 
       ID = userName.getText(); 
       pwdValue = password.getText(); 

      final JFrame frame = new JFrame("Environment Choice"); 
      frame.setSize(500, 400); 
      frame.setVisible(true); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.getContentPane().setLayout(new GridLayout(1, 1)); 
      JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); 

      tabbedPane.addTab("QAQmgrList", makeQAPanel()); 

      frame.getContentPane().add(tabbedPane); 
      } 

     } 

     public JPanel makeQAPanel() 
     { 
      JPanel p = new JPanel(); 
      p.setLayout(new GridBagLayout()); 

      GridBagConstraints gbc_QMGR1 = new GridBagConstraints(); 
      gbc_QMGR1.insets = new Insets(0, 0, 5, 5); 
      gbc_QMGR1.gridx = 1; 
      gbc_QMGR1.gridy = 1; 
      p.add(QMGR1, gbc_QMGR1);     


      GridBagConstraints gbc_QMGR2 = new GridBagConstraints(); 
      gbc_QMGR2.insets = new Insets(0, 0, 5, 5); 
      gbc_QMGR2.gridx = 1; 
      gbc_QMGR2.gridy = 2; 
      p.add(QMGR2, gbc_QMGR2);   


      return p; 
     } 

     public void createSubframe() 
     { 
      final JFrame subframe = new JFrame("Object Choice"); 
      subframe.setSize(1000, 500);   
      subframe.getContentPane().setLayout(new GridLayout(1, 1)); 
      out.setText(null);  
      out.setLineWrap(true); 
      out.setCaretPosition(out.getDocument().getLength()); 
      out.setEditable (false); 
      JScrollPane jp = new JScrollPane(out); 
      jp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
      jp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); 

      JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP); 

      JPanel queue = new JPanel(); 

      queue.add(lblqname); 
      txtqname.setText(null); 
      queue.add(txtqname);   
      queue.add(lblqcur); 
      txtqcurdfil.setText(null); 
      queue.add(txtqcurdfil);  


      JPanel chl = new JPanel(); 

      chl.add(lblchlname); 
      txtchlname.setText(null); 
      chl.add(txtchlname); 
      chl.add(lblchs); 
      txtchs.setText(null); 
      chl.add(txtchs); 



      tabbedPane.addTab("Queues", queue); 
      tabbedPane.addTab("Channels", chl);  
      subframe.getContentPane().add(tabbedPane); 
      subframe.getContentPane().add(jp); 
      tabbedPane.setVisible(true); 
      subframe.setVisible(true);  
     } 

     public static void main(String[] args) 
     {SwingUtilities.invokeLater(new Runnable(){ public void run() { @SuppressWarnings("unused") MainFrame m = new MainFrame();}});} 

     @Override 
     public void actionPerformed(ActionEvent e) 
     {    
      if (e.getSource() == QMGR1|| e.getSource() == QMGR2) 
      {createSubframe();}  

      if (e.getSource() == txtqname){qname = txtqname.getText();} 

      if (e.getSource() == txtqcurdfil) 
      { 
       cdepth = Integer.parseInt(txtqcurdfil.getText());  
       cmdissue = "qn has value messages"; 
       cmdissue = cmdissue.replace("qn", ""+qname+""); 
       cmdissue = cmdissue.replace("value", ""+cdepth+""); 
       System.out.println(cmdissue); 
       cmdissue = null; 
      } 

      if (e.getSource() == txtchlname){chlname = txtchlname.getText(); chlname=null;} 

      if (e.getSource() == txtchs) 
      { 
       chlstatus = txtchs.getText(); 
       cmdissue = "chln is chls"; 
       cmdissue = cmdissue.replace("chln", ""+chlname+""); 
       cmdissue = cmdissue.replace("chls", ""+chlstatus+""); 
       System.out.println(cmdissue); 
      }     
     } 
    } 

は、私は同意する

関連する問題