2

さて、最初に質問をするとき、通常、私はクイック検索を行うことでこれらの種類の答えを見つけることができます、これは私があまりにもイライラしているだけです。これは、総賃金と正味賃金を得るのに何時間もかかり、賃金率がかかる単純なアプレットです。これのほとんどは私の試運転(正味賃金などのために取り出される金額)ですが、先に進む前に、それを機能させたいと思います。

ボタンが押されても何も起こりません。理由は正確にはわかりません。(最近、これを試していたとき、IEでNullPointerExceptionが発生し始めましたが、おそらく私の問題とは関係ありませんが、それを捨てるだけです。)助けていただければ幸いです。iveはいくつかのことを試しましたが、間違いなくimです。 Javaでさびた!

ここにコードがあります:

import javax.swing.*;      
import java.awt.*;     
import java.awt.event.*; 

public class ButtonGrossPay extends JApplet implements ActionListener
{

 private JTextField txtHourWork;
 private JTextField txtHourRate;
 private JLabel lblGrossPay;
 private JLabel lblNetPay;

  public void init () {
    Container content_pane = getContentPane ();
    content_pane.setLayout (new FlowLayout ());     

        JLabel lblHourWork = new JLabel("Hours Worked");
        JTextField txtHourWork = new JTextField(10);
        JLabel lblHourRate = new JLabel("Pay Rate");
        JTextField txtHourRate = new JTextField(10);


        JButton btnCalculate = new JButton("Calculate Pay");
        btnCalculate.addActionListener(this);

        content_pane.add (lblHourWork);
        content_pane.add(txtHourWork);
        content_pane.add(lblHourRate);
        content_pane.add(txtHourRate);
        content_pane.add(btnCalculate);
        content_pane.add(lblGrossPay);
        content_pane.add(lblNetPay);
        }

 public void actionPerformed (ActionEvent event) {

        String firstNumber = txtHourWork.getText();
        String secondNumber = txtHourRate.getText();

        int number1 = Integer.parseInt(firstNumber);
        int number2 = Integer.parseInt(secondNumber);

        int gross = number1 * number2; 


        double netPay = 0;
        if (gross >= 0 && gross <= 99.99) {
        netPay = gross - gross * .10;
    } else if (gross >= 99.99) {
        netPay = gross - gross * .20;
    }

    lblGrossPay.setText(Integer.toString(gross));
    lblNetPay.setText(Double.toString(netPay));

    }
}
4

2 に答える 2

3

変数をシャドウイングしています。クラスのinit()メソッドで変数を再宣言して、すべてのクラスJTextFieldsが初期化されず、したがってnullになるようにします。解決策:これを行わないでください。

したがって、これに変更します。

public void init () {
    Container content_pane = getContentPane ();
    content_pane.setLayout (new FlowLayout ());     

    JLabel lblHourWork = new JLabel("Hours Worked");
    // JTextField txtHourWork = new JTextField(10);
    JLabel lblHourRate = new JLabel("Pay Rate");
    // JTextField txtHourRate = new JTextField(10);

    txtHourWork = new JTextField(10);
    txtHourRate = new JTextField(10);
于 2012-11-06T02:09:32.530 に答える
0

を初期化しJLabels lblGrossPayたり、lblNetPay引き起こしたりすることはありませんNPE。あなたが持っている必要があります:

 lblGrossPay = new JLabel();
 lblNetPay = new JLabel();
于 2012-11-06T02:10:48.170 に答える