0

私はプログラミングの初心者ですが、このサイトを使用して学習し、障害を克服しています。新しい質問を持ち出す前に、多大な支援をしてくださったすべての方々にまず感謝したいと思います。

私は最初のプロジェクトに取り組んでおり、プログラムの実行を妨げていた小さな問題を解決しました。しかし、問題の解決策は推測で発見されたので、その理由を知りたいと思っています。それは可変範囲の問題であるべきです。ここにプログラムのスニペットがありますか?

public class AlladinLamp {    

JMenuBar jmBar;
JComboBox runners, raceDiv, days, months;       
JButton horseList, ok, clear;
JTextField[] jtxt;
JTextField raceName;
JTextArea message;
String status; 
JDialog dialog;
JPanel table, data, jp, middle;
JFrame jfr;     
String[] hNam ;                                    // string array holding horse names
int[] hNum, hVal;
int reducedFNH, id, vp, day, month, fnh, dv;       // fnh is the number of horses in the
                                                      race                  

Processes processes;
GridBagLayout gbLayout;  
GridBagConstraints gbc;  

...

public AlladinLamp()
{
 ...

public ActionListener horseListActionListener = new ActionListener()
{
  @Override
  public void actionPerformed( ActionEvent e )
  {
       Toolkit myKit = dialog.getToolkit();
       Dimension dialSize = myKit.getScreenSize();
       dialog.setLocation( dialSize.width/2, dialSize.height/4 );
       dialog.setSize( 260, 380 );
       dialog.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );       

       jp.setLayout( gbLayout );  
       jtxt = new JTextField[ fnh ];            <--- array of textfields for the horse                                                                                                                 names

       JLabel label;
       String str;
       for( int i = 0; i < fnh; i++ )
       {                   
          gbc.gridx = 0;
          gbc.gridy = i;           
          str = new Integer( i+1 ) + ".";                  
          label = new JLabel( str ); 
          jp.add( label, gbc );         

          gbc.gridx = 1;
          gbc.gridy = i;
          gbc.ipady = 4;
          gbc.insets = new Insets(4,0,0,0);
          jtxt[i] = new JTextField(15);  
          jp.add( jtxt[i], gbc );               
       }
       JPanel buttonPanel = new JPanel();        
       ok = new JButton( "OK" );       
       ok.addActionListener( okActionListener );           
       buttonPanel.add( ok ); 
       clear = new JButton ( "CLEAR" );        
       clear.addActionListener( clearActionListener );   

       buttonPanel.add( clear );       
       JScrollPane jscr = new JScrollPane( jp );  
       dialog.add( jscr, BorderLayout.CENTER ); 
       dialog.add( buttonPanel, BorderLayout.SOUTH ); 
       dialog.setVisible( true );
   }
};  

...

public ActionListener okActionListener = new ActionListener()
{
  @Override
  public void actionPerformed( ActionEvent e )
  {       
    hNam = new String[ fnh ];
    hNum = new int[ fnh ];
    hVal = new int[ fnh ];  
    for( int i = 0; i < fnh; i++ )
    {               
      hNam[i] = jtxt[i].getText();             
      hNum[i] = reduce( i + 1 );       
      hVal[i] = nameValue( hNam[i] );   
    }
    System.out.println( Arrays.toString(hNam) );
    System.out.println( Arrays.toString(hVal) );
    setID( hNam );                              
   dialog.setVisible( false );       
  }
};

...

このプログラムは基本的に、いくつかの種類の入力を受け入れる GUI です。horselist ボタンのリスナーは、レースでの馬名の入力を受け入れる jDialog を構築します。

OK ボタンのリスナーは、テキスト フィールドからこれらの名前を取得し、hNam 配列に格納します。ここで、hNam、hVal、および hNum を初期化する最初の 2 行をコンストラクター内に移動すると、次のステートメントから発生する ArrayIndexOutOfBounds 例外が発生します。hNam[i] = jtxt[i].getText();

どうしてこんなことに???

4

0 に答える 0