X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FConsole.java;h=2e88eeb9238d283e332d65d45ababf6250ab72c0;hb=0424fec4a6d71684f56978f61eadd4ceb0652a60;hp=20c672aa06bb610adc8b1f516300958c85fb8e47;hpb=153dd62dc91da13ae732600e6ea55ddbe15eab39;p=jalview.git diff --git a/src/jalview/gui/Console.java b/src/jalview/gui/Console.java index 20c672a..2e88eeb 100644 --- a/src/jalview/gui/Console.java +++ b/src/jalview/gui/Console.java @@ -1,26 +1,46 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview 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. - * + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * * Jalview 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 Jalview. If not, see . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.gui; -import java.io.*; -import java.awt.*; -import java.awt.event.*; -import javax.swing.*; +import jalview.util.MessageManager; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.GraphicsEnvironment; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.io.IOException; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; +import java.io.PrintStream; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; import org.apache.log4j.SimpleLayout; @@ -33,17 +53,18 @@ import org.apache.log4j.SimpleLayout; * own applications RJHM van den Bergh , rvdb@comweb.nl */ -public class Console extends WindowAdapter implements WindowListener, - ActionListener, Runnable +public class Console extends WindowAdapter + implements WindowListener, ActionListener, Runnable { private JFrame frame; private JTextArea textArea; -/* unused - tally and limit for lines in console window - int lines = 0; - int lim = 1000; -*/ + /* + * unused - tally and limit for lines in console window int lines = 0; + * + * int lim = 1000; + */ int byteslim = 102400, bytescut = 76800; // 100k and 75k cut point. private Thread reader, reader2, textAppender; @@ -63,6 +84,10 @@ public class Console extends WindowAdapter implements WindowListener, // are we attached to some parent Desktop Desktop parent = null; + private int MIN_WIDTH = 300; + + private int MIN_HEIGHT = 250; + public Console() { // create all components and add them @@ -76,11 +101,13 @@ public class Console extends WindowAdapter implements WindowListener, { initConsole(visible, true); } - + /** * - * @param visible - open the window - * @param redirect - redirect std* + * @param visible + * - open the window + * @param redirect + * - redirect std* */ private void initConsole(boolean visible, boolean redirect) { @@ -88,7 +115,7 @@ public class Console extends WindowAdapter implements WindowListener, // textArea = cpt.getTextArea(); textArea = new JTextArea(); textArea.setEditable(false); - JButton button = new JButton("clear"); + JButton button = new JButton(MessageManager.getString("action.clear")); // frame = cpt; frame.getContentPane().setLayout(new BorderLayout()); @@ -102,7 +129,9 @@ public class Console extends WindowAdapter implements WindowListener, if (redirect) { redirectStreams(); - } else { + } + else + { unredirectStreams(); } quit = false; // signals the Threads that they should exit @@ -121,45 +150,50 @@ public class Console extends WindowAdapter implements WindowListener, textAppender.setDaemon(true); textAppender.start(); } - PipedOutputStream pout=null,perr=null; - public void redirectStreams() { - if (pout==null) + + PipedOutputStream pout = null, perr = null; + + public void redirectStreams() + { + if (pout == null) { try { pout = new PipedOutputStream(this.pin); System.setOut(new PrintStream(pout, true)); - } catch (java.io.IOException io) - { - textArea.append("Couldn't redirect STDOUT to this console\n" - + io.getMessage()); - io.printStackTrace(stderr); - } catch (SecurityException se) - { - textArea.append("Couldn't redirect STDOUT to this console\n" - + se.getMessage()); - se.printStackTrace(stderr); - } + } catch (java.io.IOException io) + { + textArea.append("Couldn't redirect STDOUT to this console\n" + + io.getMessage()); + io.printStackTrace(stderr); + } catch (SecurityException se) + { + textArea.append("Couldn't redirect STDOUT to this console\n" + + se.getMessage()); + se.printStackTrace(stderr); + } - try - { - perr = new PipedOutputStream(this.pin2); - System.setErr(new PrintStream(perr, true)); - } catch (java.io.IOException io) - { - textArea.append("Couldn't redirect STDERR to this console\n" - + io.getMessage()); - io.printStackTrace(stderr); - } catch (SecurityException se) - { - textArea.append("Couldn't redirect STDERR to this console\n" - + se.getMessage()); - se.printStackTrace(stderr); - } + try + { + perr = new PipedOutputStream(this.pin2); + System.setErr(new PrintStream(perr, true)); + } catch (java.io.IOException io) + { + textArea.append("Couldn't redirect STDERR to this console\n" + + io.getMessage()); + io.printStackTrace(stderr); + } catch (SecurityException se) + { + textArea.append("Couldn't redirect STDERR to this console\n" + + se.getMessage()); + se.printStackTrace(stderr); + } } } - public void unredirectStreams() { - if (pout!=null) + + public void unredirectStreams() + { + if (pout != null) { try { @@ -167,37 +201,37 @@ public class Console extends WindowAdapter implements WindowListener, pout.flush(); pout.close(); pin = new PipedInputStream(); - pout=null; - } catch (java.io.IOException io) - { - textArea.append("Couldn't unredirect STDOUT to this console\n" - + io.getMessage()); - io.printStackTrace(stderr); - } catch (SecurityException se) - { - textArea.append("Couldn't unredirect STDOUT to this console\n" - + se.getMessage()); - se.printStackTrace(stderr); - } + pout = null; + } catch (java.io.IOException io) + { + textArea.append("Couldn't unredirect STDOUT to this console\n" + + io.getMessage()); + io.printStackTrace(stderr); + } catch (SecurityException se) + { + textArea.append("Couldn't unredirect STDOUT to this console\n" + + se.getMessage()); + se.printStackTrace(stderr); + } - try - { - System.setErr(stderr); - perr.flush(); - perr.close(); - pin2 = new PipedInputStream(); - perr = null; - } catch (java.io.IOException io) - { - textArea.append("Couldn't unredirect STDERR to this console\n" - + io.getMessage()); + try + { + System.setErr(stderr); + perr.flush(); + perr.close(); + pin2 = new PipedInputStream(); + perr = null; + } catch (java.io.IOException io) + { + textArea.append("Couldn't unredirect STDERR to this console\n" + + io.getMessage()); io.printStackTrace(stderr); - } catch (SecurityException se) - { - textArea.append("Couldn't unredirect STDERR to this console\n" - + se.getMessage()); - se.printStackTrace(stderr); - } + } catch (SecurityException se) + { + textArea.append("Couldn't unredirect STDERR to this console\n" + + se.getMessage()); + se.printStackTrace(stderr); + } } } @@ -205,7 +239,7 @@ public class Console extends WindowAdapter implements WindowListener, { // testing part // you may omit this part for your application - // + // System.out.println("Hello World 2"); System.out.println("All fonts available to Graphic2D:\n"); @@ -213,7 +247,9 @@ public class Console extends WindowAdapter implements WindowListener, .getLocalGraphicsEnvironment(); String[] fontNames = ge.getAvailableFontFamilyNames(); for (int n = 0; n < fontNames.length; n++) + { System.out.println(fontNames[n]); + } // Testing part: simple an error thrown anywhere in this JVM will be printed // on the Console // We do it with a seperate Thread becasue we don't wan't to break a Thread @@ -229,9 +265,13 @@ public class Console extends WindowAdapter implements WindowListener, JFrame frame = new JFrame(string); frame.setName(string); if (x == -1) - x = (int) (i / 2); + { + x = i / 2; + } if (y == -1) - y = (int) (j / 2); + { + y = j / 2; + } frame.setBounds(x, y, i, j); return frame; } @@ -245,11 +285,13 @@ public class Console extends WindowAdapter implements WindowListener, { this(desktop, true); } + /** * attach a console to the desktop - the desktop will open it if requested. * * @param desktop - * @param showjconsole - if true, then redirect stdout immediately + * @param showjconsole + * - if true, then redirect stdout immediately */ public Console(Desktop desktop, boolean showjconsole) { @@ -263,9 +305,10 @@ public class Console extends WindowAdapter implements WindowListener, } else { - frame = initFrame("Jalview Java Console", bounds.width, - bounds.height, bounds.x, bounds.y); + frame = initFrame("Jalview Java Console", bounds.width, bounds.height, + bounds.x, bounds.y); } + frame.setMinimumSize(new Dimension(MIN_WIDTH, MIN_HEIGHT)); // desktop.add(frame); initConsole(false); JalviewAppender jappender = new JalviewAppender(); @@ -274,40 +317,37 @@ public class Console extends WindowAdapter implements WindowListener, org.apache.log4j.Logger.getRootLogger().addAppender(jappender); } - public synchronized void stopConsole() { quit = true; this.notifyAll(); - /*reader.notify(); - reader2.notify(); - if (errorThrower!=null) - errorThrower.notify(); // stop all threads - if (textAppender!=null) - textAppender.notify(); - */ - if (pout!=null) - { - try - { - reader.join(10); - pin.close(); - } catch (Exception e) - { - } - try + /* + * reader.notify(); reader2.notify(); if (errorThrower!=null) + * errorThrower.notify(); // stop all threads if (textAppender!=null) + * textAppender.notify(); + */ + if (pout != null) { - reader2.join(10); - pin2.close(); - } catch (Exception e) - { - } - try - { - textAppender.join(10); - } catch (Exception e) - { - } + try + { + reader.join(10); + pin.close(); + } catch (Exception e) + { + } + try + { + reader2.join(10); + pin2.close(); + } catch (Exception e) + { + } + try + { + textAppender.join(10); + } catch (Exception e) + { + } } if (!frame.isVisible()) { @@ -316,12 +356,15 @@ public class Console extends WindowAdapter implements WindowListener, // System.exit(0); } + @Override public synchronized void windowClosed(WindowEvent evt) { frame.setVisible(false); closeConsoleGui(); } - private void closeConsoleGui() { + + private void closeConsoleGui() + { updateConsole = false; if (parent == null) { @@ -334,27 +377,30 @@ public class Console extends WindowAdapter implements WindowListener, } } + @Override public synchronized void windowClosing(WindowEvent evt) { frame.setVisible(false); // default behaviour of JFrame closeConsoleGui(); - + // frame.dispose(); } + @Override public synchronized void actionPerformed(ActionEvent evt) { trimBuffer(true); // textArea.setText(""); } + @Override public synchronized void run() { try { while (Thread.currentThread() == reader) { - if (pin==null || pin.available() == 0) + if (pin == null || pin.available() == 0) { try { @@ -374,12 +420,14 @@ public class Console extends WindowAdapter implements WindowListener, stdout.print(input); long time = System.nanoTime(); appendToTextArea(input); - //stderr.println("Time taken to stdout append:\t" - // + (System.nanoTime() - time) + " ns"); + // stderr.println("Time taken to stdout append:\t" + // + (System.nanoTime() - time) + " ns"); // lines++; } if (quit) + { return; + } } while (Thread.currentThread() == reader2) @@ -403,12 +451,14 @@ public class Console extends WindowAdapter implements WindowListener, stderr.print(input); long time = System.nanoTime(); appendToTextArea(input); - //stderr.println("Time taken to stderr append:\t" - // + (System.nanoTime() - time) + " ns"); + // stderr.println("Time taken to stderr append:\t" + // + (System.nanoTime() - time) + " ns"); // lines++; } if (quit) + { return; + } } while (Thread.currentThread() == textAppender) { @@ -447,7 +497,6 @@ public class Console extends WindowAdapter implements WindowListener, } catch (InterruptedException e) { } - ; } } else @@ -472,8 +521,8 @@ public class Console extends WindowAdapter implements WindowListener, textArea.append("The error is: " + e.getMessage()); // Need to uncomment this to ensure that line tally is synched. // lines += 2; - stderr.println("Console reports an Internal error.\nThe error is: " - + e); + stderr.println( + "Console reports an Internal error.\nThe error is: " + e); } // just for testing (Throw a Nullpointer after 1 second) @@ -486,7 +535,7 @@ public class Console extends WindowAdapter implements WindowListener, { } throw new NullPointerException( - "Application test: throwing an NullPointerException It should arrive at the console"); + MessageManager.getString("exception.application_test_npe")); } } @@ -500,6 +549,7 @@ public class Console extends WindowAdapter implements WindowListener, long time = System.nanoTime(); javax.swing.SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { displayPipe.append(input); // change to stringBuffer @@ -541,8 +591,8 @@ public class Console extends WindowAdapter implements WindowListener, { long time = System.nanoTime(); textArea.replaceRange(header, 0, tlength - bytescut); - //stderr.println("Time taken to cut:\t" - // + (System.nanoTime() - time) + " ns"); + // stderr.println("Time taken to cut:\t" + // + (System.nanoTime() - time) + " ns"); } else { @@ -567,7 +617,9 @@ public class Console extends WindowAdapter implements WindowListener, { int available = in.available(); if (available == 0) + { break; + } byte b[] = new byte[available]; in.read(b); input = input + new String(b, 0, b.length); @@ -580,6 +632,10 @@ public class Console extends WindowAdapter implements WindowListener, return input; } + /** + * @j2sIgnore + * @param arg + */ public static void main(String[] arg) { new Console().test(); // create console with not reference @@ -612,19 +668,23 @@ public class Console extends WindowAdapter implements WindowListener, } /** - * set the banner that appears at the top of the console output + * set the banner that appears at the top of the console output + * * @param string */ public void setHeader(String string) { header = string; - if (header.charAt(header.length()-1)!='\n') { - header+="\n"; + if (header.charAt(header.length() - 1) != '\n') + { + header += "\n"; } textArea.insert(header, 0); } + /** * get the banner + * * @return */ public String getHeader()