private void setupFreeAlgebraPanel() { final SmallAlgebra alg = uacalc.getCurrentAlgebra(); if (alg == null) { JOptionPane.showMessageDialog( this, "<html>You must have an algebra loaded.<br>" + "Use the file menu or make a new one.</html>", "No algebra error", JOptionPane.ERROR_MESSAGE); return; } final int gens = getFreeGensDialog(); if (!(gens > 0)) return; System.out.println("gens = " + gens); final boolean thin = getThinGens(); final ProgressReport report = new ProgressReport(monitorPanel); monitorPanel.setProgressReport(report); final BackgroundTask<FreeAlgebra> freeAlgTask = new BackgroundTask<FreeAlgebra>(report) { public FreeAlgebra compute() { // monitorPanel.getProgressMonitor().reset(); report.setDescription("F(" + gens + ") over " + alg.getName()); FreeAlgebra freeAlg = new FreeAlgebra(uacalc.getCurrentAlgebra(), gens, true, thin, report); return freeAlg; } public void onCompletion( FreeAlgebra fr, Throwable exception, boolean cancelled, boolean outOfMemory) { // System.out.println("got to completion"); // System.out.println("thrown = " + exception); // for (BackgroundTask task : monitorPanel.getTaskList()) { // System.out.println("task: " + task.getStatus()); // } if (outOfMemory) { // monitorPanel.getProgressMonitor().reset(); report.addEndingLine("Out of memory!!!"); // monitorPanel.getProgressModel().printlnToLog("Not enough memory"); return; } if (!cancelled) { TermTablePanel ttp = new TermTablePanel(uacalc, fr.getTerms(), fr.getVariables()); setTermTablePanel(ttp); } else { // monitorPanel.getProgressMonitor().reset(); // monitorPanel.getProgressModel().printlnToLog("computation cancelled"); report.addEndingLine("Computation cancelled"); } } }; monitorPanel.addTask(freeAlgTask); BackgroundExec.getBackgroundExec().execute(freeAlgTask); }