在Java中,如何防止图形小程序多次运行?

在Java中,如何防止图形小程序多次运行?,java,graphics,applet,awt,Java,Graphics,Applet,Awt,我正试图编写一个简单的程序来绘制分形,并编写了以下代码。我运行它来测试它是否工作,发现它每次运行两次。我寻找答案,发现这可能与图形窗口重新绘制和重新运行整个代码有关。在我看到的其他问题中,似乎没有人关心让代码不运行多次,而是为什么要这样做,因此没有提供任何补救措施。然而,由于我使用的是扫描仪,让程序重复运行非常不方便,我主要关心的是让它只运行一次 import java.awt.*; import java.applet.*; import java.util.Scanner; public c

我正试图编写一个简单的程序来绘制分形,并编写了以下代码。我运行它来测试它是否工作,发现它每次运行两次。我寻找答案,发现这可能与图形窗口重新绘制和重新运行整个代码有关。在我看到的其他问题中,似乎没有人关心让代码不运行多次,而是为什么要这样做,因此没有提供任何补救措施。然而,由于我使用的是扫描仪,让程序重复运行非常不方便,我主要关心的是让它只运行一次

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();
     }
}
我想知道的是如何阻止图形窗口重画和重新运行所有内容,或者,如果不可能的话,还有什么可以替代graphics类来绘制内容的方法

我用一个main方法将代码转换成非Applet代码,并按预期运行了一次


如果相关的话,我将使用DrJava作为IDE。

您的问题的答案是,您不能

所以你把事情搞砸了。小程序(通常)没有用于交互的控制台-尤其不应该在
paint
方法中执行此操作,因为这可能会对用户与UI的交互产生不利影响

GUI是事件驱动的环境,也就是说,发生了一些事情,您会对此做出响应。您仍在以线性/过程性/基于控制台的方式进行思考

我的第一条建议是,不要使用小程序,它们现在不值得你花时间学习。如果您想要图形输出,我将从更好地理解如何通过事件驱动环境与用户交互开始


然后我建议你看一看,更好地理解绘画是如何在摇摆中工作的。

你的问题的答案是,你不能

所以你把事情搞砸了。小程序(通常)没有用于交互的控制台-尤其不应该在
paint
方法中执行此操作,因为这可能会对用户与UI的交互产生不利影响

GUI是事件驱动的环境,也就是说,发生了一些事情,您会对此做出响应。您仍在以线性/过程性/基于控制台的方式进行思考

我的第一条建议是,不要使用小程序,它们现在不值得你花时间学习。如果您想要图形输出,我将从更好地理解如何通过事件驱动环境与用户交互开始


然后,我建议您查看并更好地理解Swing中的绘制工作。

解决方案1:使用成员变量指示小程序是否已经绘制。可能容易出错

解决方案2:在init()方法中,将图片绘制到BuffereImage成员变量,在paint()方法中,只需绘制该图片


正如前面的答案所述,您在处理绘制时使用了错误的事件方法,因为正如您所注意到的,它将被反复绘制。

解决方案1:使用成员变量来指示小程序是否已经绘制。可能容易出错

解决方案2:在init()方法中,将图片绘制到BuffereImage成员变量,在paint()方法中,只需绘制该图片

正如我前面的回答所说的,你在处理这幅画时使用了错误的事件方法,因为正如你所注意到的,它会被一次又一次地画出来