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

Reply via email to