Solved

I get a stack dump when my program hits this error. Please help

Posted on 2004-09-12
7
204 Views
Last Modified: 2010-03-31
I am trying to trip a flag for when the Monthly Payment Amount is not valid. I noticed the payment screen field displays a square symbol when it hits this error. You can dupe the error by doing the following.
1. Select the EnterInformation Manually radio button.
2. Enter a valid range number say 25000
3. Click the Calculate button without entering any other data. You will get my code checked error and notice a square in the Monthly Payment Amount field.
4. Now click the report button and you will get the stack dump. I have put some debg here comments where I want the code to trip the flag is Payment Amount is 0. I believe it is because the value is null but I am not sure.

I have a deadline of Tuesday 8:00 PM for my fix.
Thanks for any help....


//  Gather required packages for program
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.*;
import javax.swing.BorderFactory;
import javax.swing.border.Border;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;

//  Begin MortgageCalcMRP class
public class MortgageCalcMRP extends JPanel
    {
        public int arraynum=0;                                              //  Set array to 0 for Rate/Terms selection
        public  boolean paymentZeroFlag = true;             //   Flag for zero amount in screen field for monthly payment amount
        public  boolean loanAmountFieldFlag = false;     //  Used as trip flag for error detected in Loan Amount Field
        public  boolean interestRateFieldFlag = false;    //  Used as trip flag for error detected in Interest Rate Field
        public  boolean yearsTermFieldFlag = false;       //  Used as trip flag for error detected in Years Term Field
        // Button and Radio Button defintions.
        public JButton resetButton;
        public JButton calculateButton;
        public JButton quitButton;
        public JButton reportButton;
        public  JRadioButton rate1Button = new JRadioButton("Rate 1 - 7 years at 5.35%   (84 - Payments)");
        public  JRadioButton rate2Button = new JRadioButton("Rate 2 - 15 years at 5.50%  (180 - Payments)");
        public  JRadioButton rate3Button = new JRadioButton("Rate 3 - 30 years at 5.75%  (360 - Payments)");
        public  JRadioButton rate4Button = new JRadioButton("Enter Information Manually");
        //  Labels for the input fields.
        public JLabel amountLabel = new JLabel("Loan Amount  >= 10000.00  <= 200000.00: ",JLabel.RIGHT);
        public JLabel rateLabel = new JLabel("Interest Rate  >= 1  <= 30: " ,JLabel.RIGHT );
        public JLabel yearsTermLabel = new JLabel("Years of Term  >= 1  <= 40: ",JLabel.RIGHT);
        public JLabel paymentLabel = new JLabel("Monthly Payment: ",JLabel.RIGHT);
        public JLabel errorLine1Label = new JLabel(" ",JLabel.CENTER);
        public JLabel errorLine2Label = new JLabel(" ",JLabel.CENTER);
        public JLabel errorLine3Label = new JLabel(" ",JLabel.CENTER);
        public JLabel errorLine4Label = new JLabel("  ",JLabel.CENTER);
        //  Text fields for data entry
        public JTextField loanAmountField;
        public JTextField interestRateField;
        public JTextField yearsTermField;
        public JTextField paymentField;
        public JTextArea dataReportArea;
        //  Formats for entered data.
        public DecimalFormat decimalFormat =      (DecimalFormat) NumberFormat.getNumberInstance();
        public NumberFormat currencyFormat =       (NumberFormat) NumberFormat.getNumberInstance();
        public NumberFormat percentFormat = NumberFormat.getNumberInstance();
        public DecimalFormat paymentFormat =            (DecimalFormat) NumberFormat.getNumberInstance();
        public DataVerifier verifier = new DataVerifier();
        // Execute the constructor.
        public MortgageCalcMRP()
           {
               super(new BorderLayout());
               // Formatting for display purposes of payment data.
               percentFormat.setMinimumFractionDigits(3);
               decimalFormat.setParseIntegerOnly(true);
               paymentFormat.setMaximumFractionDigits(2);
               paymentFormat.setNegativePrefix("(");
               paymentFormat.setNegativeSuffix(")");
               double payment = 0.00;
              //Create the text fields and set them up.
               loanAmountField = new JTextField(currencyFormat.format(0.00), 10);
               loanAmountField.setInputVerifier(verifier);
               loanAmountField.setBackground(Color.yellow);
               interestRateField = new JTextField(percentFormat.format(0.00), 10);
               interestRateField.setInputVerifier(verifier);
               interestRateField.setEditable(false);
               yearsTermField = new JTextField(decimalFormat.format(0), 10);
               yearsTermField.setInputVerifier(verifier);
               yearsTermField.setEditable(false);
               paymentField = new JTextField(paymentFormat.format(0.00), 10);
               paymentField.setInputVerifier(verifier);
               paymentField.setEditable(false);
               //  Create text area to output data report and allow scroll bars to be used
               errorLine1Label.setForeground(Color.red);  //  Set text color red for error highlites
               errorLine2Label.setForeground(Color.red);
               errorLine3Label.setForeground(Color.red);
               errorLine4Label.setForeground(Color.red);
               dataReportArea = new JTextArea(5, 60);      //  Set data Report Area size
               dataReportArea.setEditable(false);
               dataReportArea.setForeground(Color.gray);
               dataReportArea.setFont(new Font("Fixedsys", Font.BOLD,12));
               JScrollPane scrollPane = new JScrollPane(dataReportArea,  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,  JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
               // Create radio buttons for rate selections and set listeners
               rate1Button.setSelected(false);
               rate1Button.addItemListener(new SelectItemListener());
               rate2Button.addItemListener(new SelectItemListener());
               rate3Button.addItemListener(new SelectItemListener());
               rate4Button.addItemListener(new SelectItemListener());
               rate1Button.setBackground(Color.green);
               rate2Button.setBackground(Color.green);
               rate3Button.setBackground(Color.green);
               rate4Button.setBackground(Color.white);
               //  Group the radio buttons for one selection.
               ButtonGroup groupRate = new ButtonGroup();
               groupRate.add(rate1Button);
               groupRate.add(rate2Button);
               groupRate.add(rate3Button);
               groupRate.add(rate4Button);
               // Set the button text for major button functions.
               resetButton = new JButton("Reset Data Fields");
               resetButton.setBackground(Color.blue);
               resetButton.setForeground(Color.white);
               calculateButton = new JButton("Calculate Mortgage");
               calculateButton.setBackground(Color.red);
               calculateButton.setForeground(Color.white);
               quitButton = new JButton("Quit Program");
               quitButton.setBackground(Color.black);
               quitButton.setForeground(Color.white);
               reportButton = new JButton("Create Report");
               reportButton.setBackground(Color.white);
               reportButton.setForeground(Color.red);
               //  Register an action listener.
               loanAmountField.addActionListener(verifier);
               interestRateField.addActionListener(verifier);
               yearsTermField.addActionListener(verifier);
               resetButton.addActionListener(verifier);
               calculateButton.addActionListener(verifier);
               quitButton.addActionListener(verifier);
               reportButton.addActionListener(verifier);
               //  Set the label values.
               amountLabel.setLabelFor(loanAmountField);
               rateLabel.setLabelFor(interestRateField);
               yearsTermLabel.setLabelFor(yearsTermField);
               paymentLabel.setLabelFor(paymentField);
               //  Lay out the labels in a panel.
               Border raisedetched;
               raisedetched = BorderFactory.createEtchedBorder(EtchedBorder.RAISED);
               JPanel labelPane = new JPanel(new GridLayout(0,1));
               labelPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
               labelPane.add(amountLabel);
               labelPane.add(rateLabel);
               labelPane.add(yearsTermLabel);
               labelPane.add(paymentLabel);
               labelPane.add(errorLine1Label);
               labelPane.add(errorLine2Label);
               labelPane.add(errorLine3Label);
               labelPane.add(errorLine4Label);
               //  Layout the text fields in a panel.
              JPanel fieldPane = new JPanel(new GridLayout(0,1));
               fieldPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
               fieldPane.add(loanAmountField);
               fieldPane.add(interestRateField);
               fieldPane.add(yearsTermField);
               fieldPane.add(paymentField);
               fieldPane.add(calculateButton);
               fieldPane.add(resetButton);
               fieldPane.add(reportButton);
               fieldPane.add(quitButton);
               //  Create etched borders for panels
              JPanel textPane = new JPanel(new GridLayout(0, 1));
               textPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
               textPane.add(scrollPane);
               //  Create radio button for 3 preset loan rates/terms and add border
              JPanel radioPane  = new JPanel(new GridLayout(0, 1));
               radioPane.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
               radioPane.add(rate1Button);
               radioPane.add(rate2Button);
               radioPane.add(rate3Button);
               radioPane.add(rate4Button);
               //  Put the labels on left, entry fields on right.
               setBorder(BorderFactory.createEmptyBorder(10,40,40, 40));     //    (TOP, LEFT, BOTTOM, RIGHT)
               add(labelPane, BorderLayout.CENTER);
               add(fieldPane, BorderLayout.LINE_END);
               add(textPane, BorderLayout.SOUTH);
               add(radioPane, BorderLayout.WEST);
            }  //  End MortgageCalcMRP method block
        //  This class will test for the performed actions, and execute the
        //  method for calculating the payment.
        class DataVerifier extends InputVerifier implements ActionListener
            {
                 public void actionPerformed(ActionEvent e)
                     {
                         Object selected = e.getSource();
                         //  Clear the fields from user data and report area.
                         if (selected == resetButton)
                             {
                                 loanAmountField.setText(paymentFormat.format(0.00));
                                 paymentField.setText(paymentFormat.format(0.00));
                                 dataReportArea.setText("  \n");     //  Erase Data Area of any report data displayed
                                 errorLine1Label.setText(" ");        //  Erase error lines on screen for any errors displayed
                                 errorLine2Label.setText(" ");
                                 errorLine3Label.setText(" ");
                                 errorLine4Label.setText(" ");
                                 paymentZeroFlag = true;
                                 interestRateFieldFlag = true;          //  Reset trip flag if InterestRateField had an error
                                 loanAmountFieldFlag = true;           //  Reset trip flag if loanAmountField had an error
                                 yearsTermFieldFlag = true;             //  Reset trip flag if yearsTermField had an error
                             }
                          // Calculate mortgage payment.
                          if (selected == calculateButton)
                             {
                                 try
                                       {
                                            //  Check Loan Amount field for error parameters
                                            if (Double.parseDouble(loanAmountField.getText().trim()) < 10000 ||  Double.parseDouble(loanAmountField.getText().trim()) > 200000)
                                                {
                                                     errorLine1Label.setText("Invalid Data Range - Loan Field");
                                                     errorLine2Label.setText("Input ranges  >= 10000.00  <= 200000.00");
                                                     errorLine3Label.setText("Please input data value again");
                                                     errorLine4Label.setText("or see user manual for help");
                                                     loanAmountField.setText(paymentFormat.format(0.00));    //  Reset field to 0
                                                     dataReportArea.setText("  \n");     //   If error erase data report area
                                                     loanAmountFieldFlag = false;         //   Trip flag that Loan Amount field had error
                                               }
                                           else
                                               {
                                                    errorLine1Label.setText(" ");         //   Erase any error lines if data is within limits
                                                    errorLine2Label.setText(" ");
                                                    errorLine3Label.setText(" ");
                                                    errorLine4Label.setText(" ");
                                                    loanAmountFieldFlag = true;           //  Reset flag if data is within limits
                                               }
                                            //  Check Interest Rate Field for error parameters
                                            if (loanAmountFieldFlag == true)    //  Check that Loan Amount field does not have any errors before continuing to check Interest Rate field
                                               {
                                                    if (Double.parseDouble(interestRateField.getText().trim()) < 1 ||  Double.parseDouble(interestRateField.getText().trim()) > 30)
                                                       {
                                                           errorLine1Label.setText("Invalid Data Range - Interest Rate");
                                                           errorLine2Label.setText("Input ranges  >= 1.0  <= 30.0");
                                                           errorLine3Label.setText("Please input data value again");
                                                           errorLine4Label.setText("or see user manual for help");
                                                           interestRateField.setText(paymentFormat.format(0.00));     //  Reset field to 0
                                                           dataReportArea.setText("  \n");     //   If error erase data report area
                                                           interestRateFieldFlag = false;         //  Trip flag that Interest Rate field had error
                                                       }
                                                    else
                                                       {
                                                           errorLine1Label.setText(" ");        //   Erase any error lines if data is within limits
                                                           errorLine2Label.setText(" ");
                                                           errorLine3Label.setText(" ");
                                                           errorLine4Label.setText(" ");
                                                           interestRateFieldFlag = true;          //   Reset flag if data is within limits
                                                       }
                                               }
                                            //  Check Years Term field for error parameters
                                            if (interestRateFieldFlag == true)    //  Check that Interest Rate field does not have any errors before continuing to check Years Term field
                                              {
                                                  if (Integer.parseInt(yearsTermField.getText().trim()) < 1 ||  Integer.parseInt(yearsTermField.getText().trim()) > 40)
                                                       {
                                                           errorLine1Label.setText("Invalid Data Range - Year of Term");
                                                           errorLine2Label.setText("Input ranges  >= 1  <= 40");
                                                           errorLine3Label.setText("Please input data value again");
                                                           errorLine4Label.setText("or see user manual for help");
                                                           yearsTermField.setText(paymentFormat.format(0.00));     //  Reset field to 0
                                                           dataReportArea.setText("  \n");
                                                           yearsTermFieldFlag = false;          //  Trip flag that Years Term field had error
                                                       }
                                                  else
                                                       {
                                                           errorLine1Label.setText(" ");      //  Erase any error lines if data is within limits
                                                           errorLine2Label.setText(" ");
                                                           errorLine3Label.setText(" ");
                                                           errorLine4Label.setText(" ");
                                                           yearsTermFieldFlag = true;         //   Reset flag if data is within limits
                                                       }
                                              }
                                       }  //  End try block
                                  //  Catch errors and display for user
                                 catch (NumberFormatException m)
                                       {
                                           System.out.println("Number format error: " + m.getMessage());  // Debugging purposes to show output in DOS
                                           errorLine1Label.setText("Invalid field entry detected ");
                                           errorLine2Label.setText("GENERAL  ERROR  MESSAGE RETURNED");
                                           errorLine3Label.setText(" "+m.getMessage());
                                           errorLine4Label.setText("Refer to user manual for solution");
                                      }  //  End catch block
                                 getPayment();
                             }  //  End calculate block
                     //  Quit Program
                     if (selected == quitButton)
                        {
                             System.exit(0);
                         }  //  End quit button block
                                                   // Create Report for screen output
                     if (selected == reportButton)
                         {
//  start debug here
   if (Double.parseDouble( paymentField.getText().trim()) <=  0.0)
       { paymentZeroFlag = true;}
   else
       { paymentZeroFlag = false;}
   System.out.println(paymentField.getText());
//  end debug here
                            if (paymentZeroFlag == false)
                               {
                                   errorLine1Label.setText(" ");      //  Erase any error lines if data is within limits
                                   errorLine2Label.setText(" ");
                                   errorLine3Label.setText(" ");
                                   errorLine4Label.setText(" ");
                                   NumberFormat formatMonthNum = new DecimalFormat("   000");               //   Column formatter for payment number
                                   NumberFormat formatpercent = new DecimalFormat(".00");                                   //   Percent Rate formatter for payment number
                                   String formatStartBalance, formatInterest, formatPrincipal, formatEndBalance, formatPayment;      // Format display for column data
                                   dataReportArea.setText("Payment            Month              Start Balance           Interest             Principal           End Balance \n");
                                   double principal =  Double.parseDouble( loanAmountField.getText().trim());                           //  Principal to finance
                                   double ratePercentManual = Double.parseDouble(interestRateField.getText().trim());        //  Get array value for manual entry
                                   double ratePercent[] = { 5.35f, 5.50f, 5.75f, ratePercentManual };                                                  //   rate of loan
                                   double rate[] =             {       ratePercent[0]/100.00,                         ratePercent[1]/100.00,       ratePercent[2]/100.00,  ratePercent[3]/100.00       };      // rate in decimal format percentage
                                   int yearsLoanManual = Integer.parseInt(yearsTermField.getText().trim());         //   Get array value for manual entry
                                   int yearsLoan[] =   {  7,  15, 30, (yearsLoanManual) };                                                      //   Number of years for loan
                                   int paymentsPerYear = 12;                                                                                                               //   Set 12 month per year constant
                                   int numPayments[] = { paymentsPerYear * yearsLoan[0],  paymentsPerYear * yearsLoan[1],  paymentsPerYear * yearsLoan[2],  paymentsPerYear * yearsLoan[3]  };      // number of payments for loan
                                  double effectiveAnnualRate[] =      { rate[0] / paymentsPerYear,       rate[1] / paymentsPerYear, rate[2] / paymentsPerYear, rate[3] / paymentsPerYear            };      // variable percentage rate of loan
                                  double payment[] =      { principal*(effectiveAnnualRate[0] / (1 - Math.pow(1 + effectiveAnnualRate[0], -numPayments[0]))),
                                                                          principal*(effectiveAnnualRate[1] / (1 - Math.pow(1 + effectiveAnnualRate[1], -numPayments[1]))),
                                                                          principal*(effectiveAnnualRate[2] / (1 - Math.pow(1 + effectiveAnnualRate[2], -numPayments[2]))),
                                                                          principal*(effectiveAnnualRate[3] / (1 - Math.pow(1 + effectiveAnnualRate[3], -numPayments[3])))
                                                                       };                                                                                //  calculates montly payment
                                  int counter = 1;                                                                                                                               //   loop counter
                                  int payNumber = 0;                                                                                                                   //   payment increment counter
                                  double startBalance      = principal;                                                                           //   starting balance for display output
                                  double endBalance = 0.0;                                                                                                  //   ending balance for display output
                                  double paidInterest = 0.0;                                                                                                  //   paid interest for display output
                                  double paidPrincipal = 0.0;                                                                                                //   paid interest for display output
                                  int startYear = 2004;                                                                                                           //   year to start payments
                                  int payYear = startYear;                                                                                                //   year counter for output column display
                                  int startMonth = 10;                                                                                                                  //   month to start first payment
                                  int payMonth = startMonth;                                                                                     //  actual pay month for each payment
                                  String  month = "   ";                                                                                                                //  string format for month payment
                                  formatPayment = formatColumn(payment[arraynum]);
                                  while (payNumber < numPayments[arraynum])                                    //   Start main loop and exit if (q) or (Q) keys selected or last payment displayed
                                     {
                                         payNumber++;                                                                                                                                                                //   Payment number in table
                                         month = formatMonthDate(payMonth)+payYear;                                           //   Format month payment display
                                         if (payMonth == 12) {payYear++; payMonth=0;}                                                   //   If payment month is Dec start next payment in month of Jan
                                         paidInterest = ((startBalance*rate[arraynum])/12);                             //   Interest paid on principal balance
                                         paidPrincipal  = (payment[arraynum]-paidInterest);                                      //   Principal paid on loan
                                         endBalance  = (startBalance-paidPrincipal);                                                             //   End balance after intrerest & principal applied toward balance
                                         formatStartBalance = formatColumn(startBalance);                                    //   Format data for even columns
                                         formatInterest = formatColumn(paidInterest);
                                         formatPrincipal = formatColumn(paidPrincipal);
                                         formatEndBalance = formatColumn(endBalance);
                                         //  Print a line of data from table
                                         dataReportArea.append(formatMonthNum.format(payNumber)+"\t"+(month)+"\t"+formatStartBalance+"\t"+formatInterest+"\t"+formatPrincipal+"\t"+formatEndBalance+"\n\n");
                                         payMonth++;
                                         if (endBalance > 0.0)                                                      // If not last payment set start balance to previous ending balance
                                             startBalance = endBalance;
                                     }
                               }
                           else
                               {
                                   errorLine1Label.setText("Invalid Calculation for Monthly Payment");
                                   errorLine2Label.setText("Please ensure that all fields");
                                   errorLine3Label.setText("have valid data input within ranges");
                                   errorLine4Label.setText("and Calcuation button has beed clicked");
                                                                                                                                                                                     }  //  End paymentFlagZero check block
                         }  //  End Report Output
                  }   //  End actionPerformed block
                  //  Verify that the input data is valid, then calculate the mortgage.
              protected void getPayment()
                            {
                     // initialize values to 0
                     double amount = 0.00;
                     double rate = 0.00;
                     int numPeriods = 0;
                     double payment = 0.0;
                     // Parse the input values.  If an exception occurs, set the fields default value of 0.
                     try
                        { amount = currencyFormat.parse(loanAmountField.getText()).doubleValue(); }
                     catch (Exception e)
                         {       loanAmountField.setText(paymentFormat.format(0.00)); }
                     try
                         { rate = percentFormat.parse(interestRateField.getText()).doubleValue(); }
                     catch (Exception e)
                         {       interestRateField.setText(paymentFormat.format(0.00));      }
                     try
                          { numPeriods =      decimalFormat.parse(yearsTermField.getText()).intValue(); }
                     catch (Exception e)
                          { yearsTermField.setText(paymentFormat.format(0.00)); }
                     // Calculate the mortgage  and update the monthly payment.
                     payment = calculatePayment(amount, rate, numPeriods);
                     //  Used to set flag for display report data. If valid data flag is false else flag is true
                     if (payment >= 0.000000001)
                        {paymentZeroFlag = false;}
                     else
                        {paymentZeroFlag = true;}
                     paymentField.setText(paymentFormat.format(payment));
                  }
              //  Check the input.
              public boolean verify(JComponent input)
                  {
                      return true;
                   }
             }  //   End class DataVerifier block
          //  Used to create report column formatted data
          //  Adds proper amount of spaces for proper alignment
          public static String formatColumn(double floatNumber)
              {
                   DecimalFormat numberFormat = new DecimalFormat("$#,##0.00");
                   String stringOfNum = numberFormat.format(floatNumber);
                   int numLen = stringOfNum.length();
                   if (numLen < 13) stringOfNum = "            ".substring(numLen) + stringOfNum;
                   return (stringOfNum);
              }
          //  Used to format the month data for report
          public static String formatMonthDate(int payMonth)
               {
                    String month = "   ";
                    switch (payMonth)
                        {
                             case 1:  month = "01 JAN "; break;
                             case 2:  month = "01 FEB "; break;
                             case 3:  month = "01 MAR "; break;
                             case 4:  month = "01 APR "; break;
                             case 5:  month = "01 MAY "; break;
                             case 6:  month = "01 JUN "; break;
                             case 7:  month = "01 JUL "; break;
                             case 8:  month = "01 AUG "; break;
                             case 9:  month = "01 SEP "; break;
                             case 10: month = "01 OCT "; break;
                             case 11:      month = "01 NOV "; break;
                             case 12: month = "01 DEC "; break;
                             default: month = "   ";
                        }
                   return (month);
               }
        // Routine for Radio Button selection and action
        class  SelectItemListener implements ItemListener
              {
                  public void itemStateChanged(ItemEvent e)
                      {
                          // Get object
                          AbstractButton sel = (AbstractButton)e.getItemSelectable();
                          // Checkbox select or not
                          if(e.getStateChange() == ItemEvent.SELECTED)
                             {
                                 if (sel.getText().equals("Rate 1 - 7 years at 5.35%   (84 - Payments)"))
                                    {
                                        paymentZeroFlag = true;
                                        System.out.println("7 year loan at 5.35% selected");           // Debug purposes only
                                        arraynum = 0;  //  Selection rate1RadioButton used for array number 1
                                        yearsTermField.setText("7");
                                        interestRateField.setText("5.35");
                                        paymentField.setText("0.00");
                                        dataReportArea.setText("  \n");
                                        interestRateField.setEditable(false);
                                        yearsTermField.setEditable(false);
                                    }
                                 else if (sel.getText().equals("Rate 2 - 15 years at 5.50%  (180 - Payments)"))
                                    {
                                        paymentZeroFlag = true;
                                        System.out.println("15 year loan at 5.50% selected");         // Debug purposes only
                                        arraynum = 1;  //  Selection rate2RadioButton used for array number 2
                                        yearsTermField.setText("15");
                                        interestRateField.setText("5.50");
                                       paymentField.setText("0.00");
                                       dataReportArea.setText("  \n");
                                       interestRateField.setEditable(false);
                                       yearsTermField.setEditable(false);
                                    }
                                 else if (sel.getText().equals("Rate 3 - 30 years at 5.75%  (360 - Payments)"))
                                    {
                                       paymentZeroFlag = true;
                                       System.out.println("30 year loan at 5.75% selected");           // Debug purposes only
                                       arraynum = 2;  //  Selection rate3RadioButton used for array number 3
                                       yearsTermField.setText("30");
                                       interestRateField.setText("5.75");
                                       paymentField.setText("0.00");
                                       dataReportArea.setText("  \n");
                                       interestRateField.setEditable(false);
                                       yearsTermField.setEditable(false);
                                    }
                                 else if (sel.getText().equals("Enter Information Manually"))
                                    {
                                        paymentZeroFlag = true;
                                        System.out.println("Enter Information Manually");           // Debug purposes only
                                        arraynum = 3;  //  Selection rate3RadioButton used for array number 4
                                        yearsTermField.setText("0");
                                        interestRateField.setText("0.0");
                                        paymentField.setText("0.00");
                                        dataReportArea.setText("  \n");
                                        interestRateField.setEditable(true);
                                        yearsTermField.setEditable(true);
                                    }
                              }  //  End ItemSelected block
                       }  //  End ItemStateChanged
              }  //  End SelectItemListner block
         // Compute the monthly payment based on the loan amount,
         public double calculatePayment( double loanAmt, double rate, int numPeriods)
             {
                 double monthlyPayment = 0;
                 double monthlyInterestRate = (rate / 100 / 12);
                 numPeriods *= 12;
                 monthlyPayment = ((loanAmt * Math.pow((1 + monthlyInterestRate), numPeriods))
                                                       * monthlyInterestRate)            / (Math.pow((1 + monthlyInterestRate), numPeriods) - 1);
                 return monthlyPayment;
             }
         // main program block
         public static void main(String[] args)
            {
                //Create and set up the window.
               JFrame frame = new JFrame("Loan Shark Financial Services    -   Version 4.5");
               frame.setSize(800, 600);
               frame.setLocation(100, 200);
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               //Create and set up the content pane.
              JComponent newContentPane = new MortgageCalcMRP();
               newContentPane.setOpaque(true);
               frame.setContentPane(newContentPane);
               //Display the window.
               frame.pack();
               frame.setVisible(true);
            }  //  End main program block
   }  //  End MortgageMRP class
0
Comment
Question by:RICKPOWELL1955
7 Comments
 
LVL 92

Expert Comment

by:objects
ID: 12040926
can u post the stack trace
0
 

Author Comment

by:RICKPOWELL1955
ID: 12040996
I can take a screen dump and save as a JPeg but how can I attach the file?
0
 
LVL 92

Expert Comment

by:objects
ID: 12041038
you can't attach a file

i will run your app if i get some time this arvo
0
Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

 
LVL 92

Accepted Solution

by:
objects earned 500 total points
ID: 12041203
>  if (Double.parseDouble( paymentField.getText().trim()) <=  0.0)

this is causing an error if the field is blank

either check it, or use a try/catch (as you have for the calculate)
0
 
LVL 2

Expert Comment

by:gen718
ID: 12041388
I ran it in Eclipse and got a NumberFormatException at that source line.

0
 
LVL 16

Expert Comment

by:gnoon
ID: 12052904
>You will get my code checked error and notice a square in the Monthly Payment Amount field.

Actually, the original cause of errors is in your calculatePayment() function.


        // These 2 commands are inside getPayment(), which show the error.
        payment = calculatePayment(amount, rate, numPeriods);  
        paymentField.setText(paymentFormat.format(payment));  //<----- show number in textfield (the square character)


        // This function returns Not a Number(NaN), which cause the error.
         public double calculatePayment( double loanAmt, double rate, int numPeriods)
             {
                 double monthlyPayment = 0;
                 double monthlyInterestRate = (rate / 100 / 12);
                 numPeriods *= 12;
                 monthlyPayment = ((loanAmt * Math.pow((1 + monthlyInterestRate), numPeriods))
                                                       * monthlyInterestRate)          / (Math.pow((1 + monthlyInterestRate), numPeriods) - 1);
                 return monthlyPayment;
             }

It returns NaN because the divisor is Zero.
                (Math.pow((1 + monthlyInterestRate), numPeriods) - 1)    ==  0.0
0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

Suggested Solutions

Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
This was posted to the Netbeans forum a Feb, 2010 and I also sent it to Verisign. Who didn't help much in my struggles to get my application signed. ------------------------- Start The idea here is to target your cell phones with the correct…
Viewers will learn about the different types of variables in Java and how to declare them. Decide the type of variable desired: Put the keyword corresponding to the type of variable in front of the variable name: Use the equal sign to assign a v…
Viewers will learn about basic arrays, how to declare them, and how to use them. Introduction and definition: Declare an array and cover the syntax of declaring them: Initialize every index in the created array: Example/Features of a basic arr…

758 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now