Java tutorial
/* * TURNUS, the co-exploration framework * * Copyright (C) 2014 EPFL SCI STI MM * * This file is part of TURNUS. * * TURNUS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * TURNUS 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 TURNUS. If not, see <http://www.gnu.org/licenses/>. * * Additional permission under GNU GPL version 3 section 7 * * If you modify this Program, or any covered work, by linking or combining it * with Eclipse (or a modified version of Eclipse or an Eclipse plugin or * an Eclipse library), containing parts covered by the terms of the * Eclipse Public License (EPL), the licensors of this Program grant you * additional permission to convey the resulting work. Corresponding Source * for a non-source form of such a combination shall include the source code * for the parts of Eclipse libraries used as well as that of the covered work. * */ package co.turnus.util; import org.apache.commons.math3.fraction.BigFraction; public class ProgressTheadPrinter extends Thread { public static final int DEFAULT_SLEEP = 100; private int currentValue; private final String message; private boolean run; private final int sleepTime; private long step; private final long steps; public ProgressTheadPrinter(String message, long steps) { this(message, steps, DEFAULT_SLEEP); } public ProgressTheadPrinter(String message, long steps, int sleepTime) { super("Turnus Progress Thread: " + message); this.message = (message != null ? message + ": " : ""); this.steps = steps; this.sleepTime = sleepTime > 0 ? sleepTime : 1; currentValue = 0; step = 0; run = true; } public void finish() { run = false; } public void increment() { step++; } public void run() { SimpleTimer globalTimer = new SimpleTimer(); SimpleTimer stepTimer = new SimpleTimer(); final long stepsReduced = steps / 100; do { int val = stepsReduced != 0 ? new BigFraction(step, stepsReduced).intValue() : 0; if (val != currentValue) { currentValue = val; // if (val % 10 == 0) { TurnusLogger.info(message + val + "% after " + stepTimer.getElapsedTime() / 1000 + "s"); stepTimer.reset(); // } } try { Thread.sleep(sleepTime); } catch (Exception e) { } } while (run && step < steps); TurnusLogger.info(new StringBuilder().append(message).append("done in ") .append((int) (globalTimer.getElapsedTime() / 1000)).append("s").toString()); } public void update(long step) { this.step = step; } }