这段代码应该打印出用户在"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正在获取焦点时,您必须在控制台中按下,然后写入才能给出输入。(这可能也适用于其他控制台输入类)