在 Java 中,如何防止图形小程序多次 运行?
In Java, how do I prevent Graphics Applets from running multiple times?
我正在尝试编写一个绘制分形的简单程序,并编写了以下代码。我 运行 测试它是否有效,发现它每次 运行 两次。我寻找答案,发现它可能与图形 window 重新绘制和重新 运行 整个代码有关。在我看到的其他问题中,似乎没有人关心多次编写代码 not 运行,而是 why 它是这样做,结果没有提供任何补救措施。但是,由于我使用的是扫描仪,因此重复使用程序 运行 非常不方便,我主要关心的是只使它 运行 一次。
import java.awt.*;
import java.applet.*;
import java.util.Scanner;
public class FractalCreator extends Applet
{
public void paint(Graphics g)
{
Scanner s=new Scanner(System.in);
System.out.println("How many branches do you want each node to have?");
int branches=s.nextInt();
System.out.println("How many times do you want the fractal to repeat?");
int repetitions=s.nextInt();
}
}
我想知道的是如何阻止图形 window 重新绘制和重新 运行 一切,或者,如果这不可能,我有什么替代方案用于绘制内容的图形 class。
我使用 main 方法将代码放入非 Applet 代码中,并且它 运行 一次,正如预期的那样。
如果相关,我将 DrJava 用作 IDE。
你的问题的答案是,你不能。
所以你搞砸了一堆事情。小程序(通常)不会有用于交互的控制台——您尤其不应该在 paint
方法中执行此操作,因为这可能会对用户与您的 UI 的交互产生不利影响。
GUI 是事件驱动的环境,也就是说,某事发生了,你就响应它。您仍在以 linear/procedural/console 的方式思考
我的第一条建议是,根本不要使用小程序,它们现在不值得您花时间学习。如果您想要图形输出,我会先让 Creating a GUI With JFC/Swing 更好地理解如何通过事件驱动的环境与用户交互。
然后我建议您查看 Painting in AWT and Swing and Performing Custom Painting 以更好地了解绘画在 Swing 中的工作原理。
方案一:使用一个成员变量来表示Applet是否已经被绘制。可能容易出错。
解决方案 2:在 init() 方法中,将图片绘制到 BufferedImage 成员变量中,然后在 paint() 方法中,简单地绘制该图片。
正如我之前的回答所述,您在处理绘画的错误事件方法中进行操作,因为正如您所注意到的那样,它会被一遍又一遍地绘制。
我正在尝试编写一个绘制分形的简单程序,并编写了以下代码。我 运行 测试它是否有效,发现它每次 运行 两次。我寻找答案,发现它可能与图形 window 重新绘制和重新 运行 整个代码有关。在我看到的其他问题中,似乎没有人关心多次编写代码 not 运行,而是 why 它是这样做,结果没有提供任何补救措施。但是,由于我使用的是扫描仪,因此重复使用程序 运行 非常不方便,我主要关心的是只使它 运行 一次。
import java.awt.*;
import java.applet.*;
import java.util.Scanner;
public class FractalCreator extends Applet
{
public void paint(Graphics g)
{
Scanner s=new Scanner(System.in);
System.out.println("How many branches do you want each node to have?");
int branches=s.nextInt();
System.out.println("How many times do you want the fractal to repeat?");
int repetitions=s.nextInt();
}
}
我想知道的是如何阻止图形 window 重新绘制和重新 运行 一切,或者,如果这不可能,我有什么替代方案用于绘制内容的图形 class。
我使用 main 方法将代码放入非 Applet 代码中,并且它 运行 一次,正如预期的那样。
如果相关,我将 DrJava 用作 IDE。
你的问题的答案是,你不能。
所以你搞砸了一堆事情。小程序(通常)不会有用于交互的控制台——您尤其不应该在 paint
方法中执行此操作,因为这可能会对用户与您的 UI 的交互产生不利影响。
GUI 是事件驱动的环境,也就是说,某事发生了,你就响应它。您仍在以 linear/procedural/console 的方式思考
我的第一条建议是,根本不要使用小程序,它们现在不值得您花时间学习。如果您想要图形输出,我会先让 Creating a GUI With JFC/Swing 更好地理解如何通过事件驱动的环境与用户交互。
然后我建议您查看 Painting in AWT and Swing and Performing Custom Painting 以更好地了解绘画在 Swing 中的工作原理。
方案一:使用一个成员变量来表示Applet是否已经被绘制。可能容易出错。
解决方案 2:在 init() 方法中,将图片绘制到 BufferedImage 成员变量中,然后在 paint() 方法中,简单地绘制该图片。
正如我之前的回答所述,您在处理绘画的错误事件方法中进行操作,因为正如您所注意到的那样,它会被一遍又一遍地绘制。