Question

This code should print out the number of circles the user inputs at "Num" and give them a random radius and center point, but it doesn't draw anything. The applet itself just shows "Applet started". Any solutions ?

EDIT: Also, the applets that are opened do not close until Eclipse itself is closed. EDIT: Updated code.

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");
        }
    }

}

Console reader class:

    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; 
}
Was it helpful?

Solution

Your ConsoleReader class is somehow blocking or it might be faulty, the basic one should fix your problem.

Replace:

ConsoleReader console = new ConsoleReader(System.in);

with

Scanner console = new Scanner(System.in);

Also remember that you have to press enter after you've entered the number and that you have to enter it in the console, not in the applet window.

Edit: As the appletviewer is taking the focus you have to press in the console and then write to be able to give an input. (This might work with your other console input class too)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top