2015-11-29 2 views
1

Я пытаюсь написать простую программу, которая рисует фракталы, и написала следующий код. Я запустил его, чтобы проверить, работает ли он, и обнаружил, что он запускается дважды каждый раз. Я искал ответы и обнаружил, что он, вероятно, имеет какое-то отношение к перерисовке графического окна и повторному запуску всего кода. В других вопросах, которые я видел, никто не думал о том, что код не выполнялся несколько раз, а почему он делал это, и никаких средств не было предоставлено в результате. Однако из-за того, что я пользуюсь сканерами, крайне сложно постоянно запускать программу, и моя главная задача - запустить ее только один раз.В Java, как предотвратить многократное использование графических апплетов?

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, чтобы нарисовать вещи.

Я поместил код в код без апплета с помощью основного метода, и он запускался один раз, как и предполагалось.

Если это актуально, я использую DrJava как IDE.

ответ

0

Ответ на ваш вопрос: вы не можете.

Так что вы ввергаете кучу вещей. Апплет не будет (обычно) иметь консоль для использования взаимодействия - вам особенно не следует делать это из-за метода paint, так как это может негативно повлиять на взаимодействие пользователя с вашим пользовательским интерфейсом.

GUI - это среда, управляемая событиями, то есть что-то происходит, и вы отвечаете на него. Вы все еще думаете о линейном/процедурном/консольном способе.

Мой первый совет: не используйте апплеты, они не стоят вашего времени, чтобы учиться прямо сейчас. Если вы хотите графический вывод, я бы начал с Creating a GUI With JFC/Swing для лучшего понимания того, как взаимодействовать с пользователями через среду, управляемую событиями.

Я бы предложил, чтобы вы взглянули на Painting in AWT and Swing и Performing Custom Painting, чтобы лучше понять, как работает живопись в Swing.

0

Решение 1: Используйте переменную-член, чтобы указать, был ли уже нанесен апплет. Может быть подвержен ошибкам.

Решение 2. В методе init() нарисуйте изображение в переменной члена BufferedImage и в методе paint() просто нарисуйте это изображение.

Как я уже говорил, вы действуете в неправильном методе событий для обработки картины, потому что, как вы заметили, она будет нарисоваться снова и снова.