为什么这不打印"Num"圈?



这段代码应该打印出用户在"Num"处输入的圆的数量,并给它们一个随机的半径和中心点,但它没有绘制任何东西。小程序本身只显示"applet started"。有解决方案吗?

编辑:另外,打开的applet在Eclipse本身关闭之前不会关闭。编辑:更新的代码。

import java.applet.Applet;
import java.awt.*;
import java.util.Random;
public class project10 extends Applet {
    ConsoleReader console = new ConsoleReader(System.in);
    Random generator = new Random();
    private static final long serialVersionUID = -3660618513445557612L;

    public void drawCenteredCircle(Graphics g, int x, int y, int r) {
          g.fillOval(x,y,r,r);
    }

    public void paint(Graphics g){
        int num = 5;
        try{
        System.out.println("How many circles would you like to draw?");
        //num = console.readInt();
        for(int i = 1; num >= i; i++){
            g.setColor(Color.BLACK);
            int one = generator.nextInt(100);
            int two = generator.nextInt(100);
            int three = generator.nextInt(100);
            drawCenteredCircle(g,one,two,three);
        }
        }catch(NumberFormatException e){
            System.out.println("Input was not a valid number, please try again.");
        }finally{
            System.out.println("You printed " + num + " circles");
        }
    }
}

控制台阅读器类:

    import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;
/** 
   A class to read strings and numbers from an input stream.
   This class is suitable for beginning Java programmers.
   It constructs the necessary buffered reader, 
   handles I/O exceptions, and converts strings to numbers.
*/
public class ConsoleReader
{  /**
      Constructs a console reader from an input stream
      such as System.in
      @param inStream an input stream 
   */
   public ConsoleReader(InputStream inStream)
   {  reader = new BufferedReader
         (new InputStreamReader(inStream)); 
   }
   /**
      Reads a line of input and converts it into an integer.
      The input line must contain nothing but an integer.
      Not even added white space is allowed.
      @return the integer that the user typed
   */
   public int readInt() 
   {  String inputString = readLine();
      int n = Integer.parseInt(inputString);
      return n;
   }
   /**
      Reads a line of input and converts it into a floating-
      point number. The input line must contain nothing but 
      a nunber. Not even added white space is allowed.
      @return the number that the user typed
   */
   public double readDouble() 
   {  String inputString = readLine();
      double x = Double.parseDouble(inputString);
      return x;
   }
   /**
      Reads a line of input. In the (unlikely) event
      of an IOException, the program terminates. 
      @return the line of input that the user typed, null
      at the end of input
   */
   public String readLine() 
   {  String inputLine = "";
      try
      {  inputLine = reader.readLine();
      }
      catch(IOException e)
      {  System.out.println(e);
         System.exit(1);
      }
      return inputLine;
   }
   private BufferedReader reader; 
}

您的ConsoleReader类以某种方式阻塞或它可能是错误的,基本的应该解决您的问题。

替换:

ConsoleReader console = new ConsoleReader(System.in);

Scanner console = new Scanner(System.in);

还要记住,你必须在输入数字后按回车键,并且你必须在控制台中输入,而不是在applet窗口中输入。

编辑:当appltviewer正在获取焦点时,您必须在控制台中按下,然后写入才能给出输入。(这可能也适用于其他控制台输入类)

最新更新