1

新しい例外のスローに関するコードに問題があります。

JTextField の 1 つに番号 0 を入力しますが、それは正しくありません。この瞬間に「ENTER」ボタンをクリックすると、新しい例外メッセージがスローされます。

throw new Exception("Wrong number of express lanes range beginnig!! \n Please enter positive number!");

ボックス メッセージが表示され、[OK] しかクリックできないというエラー メッセージが表示されます。「OK」をクリックした後、JTextField の間違ったデータを修正したいので、プログラムを停止させたいと思います。「OK」をクリックした後、プログラムは処理を続行するため、それを行うことはできません。プログラムを停止してデータを修正するにはどうすればよいですか? これは、問題があることがわかるコードの重要な部分です。

    public class UILayer 
{

private JTextField text1, text2, text3, text4, text5, text6;

private void validateNumbers() throws Exception
{


    if(!text1.getText().equals("") && 
            Integer.parseInt(text1.getText()) <= 0 )
        throw new Exception("Wrong number of lanes!! \n Please enter positive number!");
    if(!text2.getText().equals("") && 
            Integer.parseInt(text2.getText()) <= 0 )
        throw new Exception("Wrong number of express lanes!! \n Please enter positive number!");

    if(!text3.getText().equals("") && 
            Integer.parseInt(text3.getText()) <= 0 )
        throw new Exception("Wrong number of express lanes range beginnig!! \n Please enter positive number!");

    if(!text4.getText().equals("") && 
            Integer.parseInt(text4.getText()) <= 0 )
        throw new Exception("Wrong number of express lanes range ending!! \n Please enter positive number!");
    if(!text5.getText().equals("") && 
            Integer.parseInt(text5.getText()) <= 0 )
        throw new Exception("Wrong number of customers!! \n Please enter positive number!");
    if(!text6.getText().equals("") && 
            Integer.parseInt(text6.getText()) <= 0 )
        throw new Exception("Wrong number of max items!! \n Please enter positive number!");

}

protected class EnterClickListener implements ActionListener
{
    private SimulationConfig info;

    EnterClickListener( )
    { 
        info = new SimulationConfig();
    }

    @Override
    public void actionPerformed( ActionEvent event ) 
    {   
        try
        {
            if(!(event.getActionCommand().equals(null )))
            {
                validateForm();
                validateNumbers();
            }   
        }
        catch(NumberFormatException e) 
        {
            JOptionPane.showMessageDialog( null, "Error.\nPlease enter number.", 
                     "Message", JOptionPane.INFORMATION_MESSAGE );
        } 
        catch (Exception e)
        {
            JOptionPane.showMessageDialog( null, "Error.\n" + e.getMessage() , 
                     "Message", JOptionPane.INFORMATION_MESSAGE );
        }
        info.setCustomerRestriction(Integer.parseInt(text5.getText()), Integer.parseInt(text6.getText()));
        info.setExpressRange(Integer.parseInt(text3.getText()), Integer.parseInt(text4.getText()));
        info.setLanesNum(Integer.parseInt(text1.getText()), Integer.parseInt(text2.getText()));
        showProgressBar();
        task = blayer.startSimulation(info);
        task.addPropertyChangeListener(new PropertyChangeListener());
        task.execute();
    }
}
4

2 に答える 2

2

あなたのコードを入れてください

info.setCustomerRestriction(Integer.parseInt(text5.getText())....
......
task.execute();

if の後に try の内部。このような:

@Override
public void actionPerformed( ActionEvent event ) 
{   
    try
    {
        if(!(event.getActionCommand().equals(null )))
        {
            validateForm();
            validateNumbers();

            info.setCustomerRestriction(Integer.parseInt(text5.getText()), Integer.parseInt(text6.getText()));
    info.setExpressRange(Integer.parseInt(text3.getText()), Integer.parseInt(text4.getText()));
    info.setLanesNum(Integer.parseInt(text1.getText()), Integer.parseInt(text2.getText()));
    showProgressBar();
    task = blayer.startSimulation(info);
    task.addPropertyChangeListener(new PropertyChangeListener());
    task.execute();
        }   
    }
    catch(NumberFormatException e) 
    {
        JOptionPane.showMessageDialog( null, "Error.\nPlease enter number.", 
                 "Message", JOptionPane.INFORMATION_MESSAGE );
    } 
    catch (Exception e)
    {
        JOptionPane.showMessageDialog( null, "Error.\n" + e.getMessage() , 
                 "Message", JOptionPane.INFORMATION_MESSAGE );
    }

}
于 2013-03-15T02:20:12.243 に答える
1

PCが提供する解決策は、非常に優れています。代わりに、プログラムの実行を中止する機能を持つユーザー定義のExceptionクラスを作成するだけです。これは、再利用できるため、同じコードを再度作成する必要がないためです(複数の場所またはJavaクラスで同じ例外を処理します)。あなたがする必要があるのは:

  1. 要件に応じて、RuntimeException、Exception、またはThrowableに拡張するパブリッククラスを取得します
  2. Stringパラメーターを使用してパブリックコンストラクターを取得します
  3. super(your_String_parameter_here);を呼び出します。コンストラクター内のフォーム(この例外の処理をスキップしてスーパークラス例外への直接処理を行う場合は、適切なメッセージをそこに渡すことができます)
  4. toString()メソッドをオーバーライドして、Exceptionクラスオブジェクトに適切な文字列メッセージを提供します

これで、このExceptionクラスをコード内のどこでも再利用できます。

于 2013-03-15T05:59:14.327 に答える