/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* JFlex 1.8.2 *
* Copyright (C) 1998-2018 Gerwin Klein <lsf@jflex.de> *
* All rights reserved. *
* *
* License: BSD *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package jflex.gui;
import java.io.File;
import java.util.Objects;
import jflex.core.OptionUtils;
import jflex.exceptions.GeneratorException;
import jflex.generator.LexGenerator;
import jflex.l10n.ErrorMessages;
import jflex.logging.Out;
Low priority thread for code generation (low priority that gui has time for screen updates)
Author: Gerwin Klein Version: JFlex 1.8.2
/**
* Low priority thread for code generation (low priority that gui has time for screen updates)
*
* @author Gerwin Klein
* @version JFlex 1.8.2
*/
public class GeneratorThread extends Thread {
there must be at most one instance of this Thread running /** there must be at most one instance of this Thread running */
private static volatile boolean running = false;
input file setting from GUI /** input file setting from GUI */
String inputFile;
output directory /** output directory */
String outputDir;
main UI component, likes to be notified when generator finishes /** main UI component, likes to be notified when generator finishes */
final MainFrame parent;
Create a new GeneratorThread, but do not run it yet.
Params: - parent – the frame, main UI component
- inputFile – input file from UI settings
- outputDir – output directory from UI settings
/**
* Create a new GeneratorThread, but do not run it yet.
*
* @param parent the frame, main UI component
* @param inputFile input file from UI settings
* @param outputDir output directory from UI settings
*/
public GeneratorThread(MainFrame parent, String inputFile, String outputDir) {
this.parent = parent;
this.inputFile = inputFile;
this.outputDir = outputDir;
}
Runs the generator thread. Only one instance of it can run at any time. /** Runs the generator thread. Only one instance of it can run at any time. */
@Override
public void run() {
if (running) {
Out.error(ErrorMessages.ALREADY_RUNNING);
parent.generationFinished(false);
} else {
running = true;
setPriority(MIN_PRIORITY);
try {
if (!Objects.equals(outputDir, "")) {
OptionUtils.setDir(outputDir);
}
new LexGenerator(new File(inputFile)).generate();
Out.statistics();
parent.generationFinished(true);
} catch (GeneratorException e) {
Out.statistics();
parent.generationFinished(false);
} finally {
running = false;
}
}
}
}