blob: a225e890664fa92862463c2ebd90bf1934e9bba9 [file] [log] [blame]
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* JFlex 1.4.3 *
* Copyright (C) 1998-2009 Gerwin Klein <lsf@jflex.de> *
* All rights reserved. *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License. See the file *
* COPYRIGHT for more information. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package JFlex.gui;
import JFlex.*;
import java.io.File;
/**
* Low priority thread for code generation (low priority
* that gui has time for screen updates)
*
* @author Gerwin Klein
* @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $
*/
public class GeneratorThread extends Thread {
/** there must be at most one instance of this Thread running */
private static volatile boolean running = false;
/** input file setting from GUI */
String inputFile;
/** output directory */
String outputDir;
/** main UI component, likes to be notified when generator finishes */
MainFrame parent;
/**
* 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 messages where generator messages should appear
* @param outputDir output directory from UI settings
*/
public GeneratorThread(MainFrame parent, String inputFile,
String outputDir) {
this.parent = parent;
this.inputFile = inputFile;
this.outputDir = outputDir;
}
/**
* Run the generator thread. Only one instance of it can run at any time.
*/
public void run() {
if (running) {
Out.error(ErrorMessages.ALREADY_RUNNING);
parent.generationFinished(false);
}
else {
running = true;
setPriority(MIN_PRIORITY);
try {
if (!outputDir.equals("")) {
Options.setDir(outputDir);
}
Main.generate(new File(inputFile));
Out.statistics();
parent.generationFinished(true);
}
catch (GeneratorException e) {
Out.statistics();
parent.generationFinished(false);
}
finally {
running = false;
}
}
}
}