1

この Java の何が問題なのですか?Applet問題なくコンパイルしても実行されません。

import java.applet.*;//Importing java.applet
public class MyApplet extends Applet {
   TextField txt1, txt2;
   public void init(){//Initializing our applet
       txt1 = new TextField(""); //Creates a textfield 'txt1'
       txt2 = new TextField(""); //Creates a textfield 'txt2'
       setBackground(Color.CYAN);//Setting background color to CYAN
       add(txt1); //Adds textfield 'txt1' to your applet
       add(txt2); //Adds textfield 'txt2' to your applet
   }
   public void paint(Graphics obj){//Paint method to display our message
       String s1 =  txt1.getText(); //Fetching data from text field 1.
       String s2 =  txt2.getText(); //Fetching data from text field 2.
       int num1=0, num2 = 0, num3;   //Declaring 3 integer variables    
       num1 = Integer.parseInt(s1); //Parsing the string value of text field 1 to integer
       num2 = Integer.parseInt(s2); //Parsing the string value of text field 2 in integer
       num3 = num1 + num2;       //Performing addition
       String s3 = String.valueOf(num3); //Converting the result from integer to string
       obj.drawString("Result:", 40, 50);
       obj.drawString(s3, 50, 50);//To display the result
   }
}
4

3 に答える 3

1

NumberFormatExceptionaがスローされていると強く疑っています。

結局のところ、アプレットが自分自身を描画しようとするときはいつでも(初期化直後を含む)、次のコードを実行することになります。

// Comments removed as they were more distracting than useful. You really
// *don't* need to comment variable declarations to say they're declarations...
String s1 =  txt1.getText();
String s2 =  txt2.getText();
int num1=0, num2 = 0, num3; 
num1 = Integer.parseInt(s1);
num2 = Integer.parseInt(s2);

したがってtxt1.getText()、ユーザーが何かを入力する前に空の文字列を返すと、その空の文字列を解析することになり、NumberFormatException.

このアプレットの全体的なデザインは不適切だと思います。drawString本質的にラベルに使用したいのはなぜですか?

1 つまたは 2 つのLabelコントロールを追加します。1 つは完全なテキスト "Result: " と結果用、または 1 つは "Result: " だけで、別のコントロールは結果用です。次に、オーバーライドする必要はまったくありません。代わりに、テキストボックスの内容が変更されたときのpaint()ハンドラーを追加できます。結局のところ、何かを変更する必要があるのはこれだけです。

Integer.parseInt次に、呼び出しを try/catch ブロックに配置して、 catch を実行する必要がありますNumberFormatExceptionNumberFormat( の代わりにa を使用することも検討Integer.parseIntできますが、後で行うことができます...)

于 2012-08-18T08:09:59.240 に答える
0

問題は次のとおりです。

txt1 = new TextField("");
txt2 = new TextField("");

なので

String s1 =  txt1.getText(); 
String s2 =  txt2.getText();
num1 = Integer.parseInt(s1);
num2 = Integer.parseInt(s2);

解析できず、Jon Skeet の説明どおり ""になります。throw exception

したがって、修正try catchブロック (例外処理)である可能性があります。

try{
    num1 = Integer.parseInt(s1);
    num2 = Integer.parseInt(s2);
   }catch(NumberFormatException ex){
       System.out.println(ex);
   }

OR 解析可能な初期String値がある

txt1 = new TextField("0"); 
txt2 = new TextField("0");
于 2012-08-18T08:52:28.990 に答える
0

主な問題は、弦を適切に塗装できなかったことです。このpaintメソッドは、入力がある前にアプレットによって数回呼び出されます。したがって、テキストフィールドには空の文字列があります。これはNumberFormatException. テキストに空の値がないか確認してください。数値を解析する場合は、try/catchブロックを追加します。さらに、ロジックをメソッドに移動し、calculate入力repaint時に開始します。これは、テキスト フィールドにいくつかのリスナーを追加した場合に発生する可能性があります。

import java.applet.*;
import java.awt.*;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;//Importing java.applet
public class MyApplet extends Applet
{
  TextField txt1, txt2;
  String s3;
  public void init()//Initializing our applet
  {
    txt1 = new TextField(""); //Creates a textfield 'txt1'
    txt2 = new TextField(""); //Creates a textfield 'txt2'
    txt1.addTextListener(new TextListener(){
      public void textValueChanged(TextEvent e) {
        calculate();
      }
    });
    txt2.addTextListener(new TextListener(){
      public void textValueChanged(TextEvent e) {
        calculate();
      }
    });
    setBackground(Color.CYAN);//Setting background color to CYAN
    add(txt1); //Adds textfield 'txt1' to your applet
    add(txt2); //Adds textfield 'txt2' to your applet
  }

  void calculate(){
    try {
      String s1 =  txt1.getText(); //Fetching data from text field 1.
      String s2 =  txt2.getText(); //Fetching data from text field 2.
      int num1=0, num2 = 0, num3;  //Declaring 3 integer variables
      num1 = Integer.parseInt(s1); //Parsing the string value of text field 1 to integer
      num2 = Integer.parseInt(s2); //Parsing the string value of text field 2 in integer
      num3 = num1 + num2;          //Performing addition
      s3 = String.valueOf(num3); //Converting the result from integer to string
      repaint();
    } catch (NumberFormatException nfe){}

  }
  public void paint(Graphics obj)//Paint method to display our message
  {
    super.paint(obj);
    obj.drawString("Result:", 100, 100);
    if (s3 != null)
      obj.drawString(s3, 150, 100);//To display the result
  }
}
于 2012-08-18T08:30:56.683 に答える