Revision: 7397 http://languagetool.svn.sourceforge.net/languagetool/?rev=7397&view=rev Author: milek_pl Date: 2012-06-18 08:45:29 +0000 (Mon, 18 Jun 2012) Log Message: ----------- fix a bug when two fast mouse clicks activated the check twice (various Java exceptions thrown due to non-synchronized methods)
Modified Paths: -------------- trunk/JLanguageTool/src/java/org/languagetool/gui/Main.java Modified: trunk/JLanguageTool/src/java/org/languagetool/gui/Main.java =================================================================== --- trunk/JLanguageTool/src/java/org/languagetool/gui/Main.java 2012-06-18 08:37:51 UTC (rev 7396) +++ trunk/JLanguageTool/src/java/org/languagetool/gui/Main.java 2012-06-18 08:45:29 UTC (rev 7397) @@ -89,9 +89,11 @@ private boolean closeHidesToTray; private boolean isInTray; + + private boolean isAlreadyChecking; private Main() throws IOException { - LanguageIdentifierTools.addLtProfiles(); + LanguageIdentifierTools.addLtProfiles(); config = new Configuration(new File(System.getProperty("user.home")), CONFIG_FILE, null); messages = JLanguageTool.getMessageBundle(); maybeStartServer(); @@ -301,7 +303,7 @@ Tools.showError(e); } // Stop server, start new server if requested: - stopServer(); + stopServer(); maybeStartServer(); } @@ -310,7 +312,7 @@ } // show GUI and check the text from clipboard/selection: - private void restoreFromTrayAndCheck() { + private void restoreFromTrayAndCheck() { final String s = getClipboardText(); restoreFromTray(); textArea.setText(s); @@ -381,7 +383,7 @@ if (config.getRunServer()) { httpServer = new HTTPServer(config.getServerPort(), false, true); try { - httpServer.run(); + httpServer.run(); } catch (final PortBindingException e) { final String message = e.getMessage() + "\n\n" + org.languagetool.tools.Tools.getFullStackTrace(e); JOptionPane.showMessageDialog(null, message, "Error", JOptionPane.ERROR_MESSAGE); @@ -458,51 +460,55 @@ } private void checkTextAndDisplayResults() { - final Language lang = getCurrentLanguage(); - if (StringTools.isEmpty(textArea.getText().trim())) { - textArea.setText(messages.getString("enterText2")); - } else { - final String langName; - if (lang.isExternal()) { - langName = lang.getTranslatedName(messages) + EXTERNAL_LANGUAGE_SUFFIX; + final Language lang = getCurrentLanguage(); + if (StringTools.isEmpty(textArea.getText().trim())) { + textArea.setText(messages.getString("enterText2")); } else { - langName = lang.getTranslatedName(messages); + final String langName; + if (lang.isExternal()) { + langName = lang.getTranslatedName(messages) + EXTERNAL_LANGUAGE_SUFFIX; + } else { + langName = lang.getTranslatedName(messages); + } + new Thread() { + public void run() { + if (!isAlreadyChecking) { + isAlreadyChecking = true; + setWaitCursor(); + checkTextButton.setEnabled(false); + try { + final String startCheckText = HTML_GREY_FONT_START + + Tools.makeTexti18n(messages, "startChecking", new Object[]{langName}) + "..." + HTML_FONT_END; + resultArea.setText(startCheckText); + resultArea.repaint(); + final StringBuilder sb = new StringBuilder(); + sb.append(startCheckText); + sb.append("<br>\n"); + int matches = 0; + try { + final JLanguageTool langTool = getCurrentLanguageTool(lang); + matches = checkText(langTool, textArea.getText(), sb); + } catch (final Exception e) { + sb.append("<br><br><b><font color=\"red\">"); + sb.append(org.languagetool.tools.Tools.getFullStackTrace(e).replace("\n", "<br/>")); + sb.append("</font></b><br>"); + } + final String checkDone = Tools.makeTexti18n(messages, "checkDone", new Object[] {matches}); + sb.append(HTML_GREY_FONT_START); + sb.append(checkDone); + sb.append(HTML_FONT_END); + sb.append("<br>\n"); + resultArea.setText(HTML_FONT_START + sb.toString() + HTML_FONT_END); + resultArea.setCaretPosition(0); + } finally { + checkTextButton.setEnabled(true); + unsetWaitCursor(); + isAlreadyChecking = false; + } + } + } + }.start(); } - new Thread() { - public void run() { - setWaitCursor(); - checkTextButton.setEnabled(false); - try { - final String startCheckText = HTML_GREY_FONT_START + - Tools.makeTexti18n(messages, "startChecking", new Object[]{langName}) + "..." + HTML_FONT_END; - resultArea.setText(startCheckText); - resultArea.repaint(); - final StringBuilder sb = new StringBuilder(); - sb.append(startCheckText); - sb.append("<br>\n"); - int matches = 0; - try { - final JLanguageTool langTool = getCurrentLanguageTool(lang); - matches = checkText(langTool, textArea.getText(), sb); - } catch (final Exception e) { - sb.append("<br><br><b><font color=\"red\">"); - sb.append(org.languagetool.tools.Tools.getFullStackTrace(e).replace("\n", "<br/>")); - sb.append("</font></b><br>"); - } - final String checkDone = Tools.makeTexti18n(messages, "checkDone", new Object[] {matches}); - sb.append(HTML_GREY_FONT_START); - sb.append(checkDone); - sb.append(HTML_FONT_END); - sb.append("<br>\n"); - resultArea.setText(HTML_FONT_START + sb.toString() + HTML_FONT_END); - resultArea.setCaretPosition(0); - } finally { - checkTextButton.setEnabled(true); - unsetWaitCursor(); - } - } - }.start(); - } } private void setWaitCursor() { @@ -706,7 +712,7 @@ } else if (frame.isVisible() && !frame.isActive()) { frame.toFront(); restoreFromTrayAndCheck(); - } else { + } else { restoreFromTrayAndCheck(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Languagetool-cvs mailing list Languagetool-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/languagetool-cvs