@@ -377,10 +377,18 @@ protected void printToConsole(String line) {
377377 console .append ("\n " + line );
378378 }
379379
380- //Move console position.
380+ //Move console caret position.
381381 if (console .getLineCount () > 2 ) {
382382 try {
383- console .setCaretPosition (console .getLineEndOffset (console .getLineCount ()-2 )+1 );
383+ int lineOffset = console .getLineEndOffset (console .getLineCount ()-2 ) + 1 ;
384+
385+ //Move the caret.
386+ try {
387+ console .setCaretPosition (lineOffset );
388+ } catch (IllegalArgumentException e ) {
389+ //If console complains about bad caret position, go somewhere we know 100% is valid.
390+ console .setCaretPosition (console .getLineEndOffset (console .getLineCount () - 1 ));
391+ }
384392 } catch (BadLocationException e ) {
385393 e .printStackTrace ();
386394 }
@@ -668,27 +676,11 @@ public void actionPerformed(ActionEvent e) {
668676 if (e .getSource () == logInButton ) {
669677 logInMenu .show (logInButton , 0 , logInButton .getHeight ());
670678 } else if (e .getSource () == logInHomeButton ) {
671- logInAt ( homeWikiLanguage );
679+ logInAtHome ( );
672680 } else if (e .getSource () == logInSelectedButton ) {
673- int [] index = wikiTable .getSelectedRows ();
674- for (int i : index ) {
675- logInAt (mdm .getWikiPrefix (i ));
676- }
681+ logInAtSelected ();
677682 } else if (e .getSource () == logInAllButton ) {
678- SwingWorker <Void , Void > worker = new SwingWorker <Void , Void >() {
679- @ Override
680- public Void doInBackground () {
681- logInEverywhere ();
682-
683- return null ;
684- }
685-
686- @ Override
687- protected void done () {
688- }
689- };
690-
691- worker .execute ();
683+ logInEverywhere ();
692684 } else if (e .getSource () == exitButton ){
693685 System .exit (0 );
694686 } else if (e .getSource () == printLogButton ) {
@@ -755,18 +747,51 @@ protected void done() {
755747 }
756748
757749 /*
758- * Logging in methods
750+ * Logging in methods for GUI only.
759751 */
760752
753+ public void logInAtHome () {
754+ ArrayList <String > languageCodes = new ArrayList <String >();
755+ languageCodes .add (homeWikiLanguage );
756+ logInAt (languageCodes );
757+ }
758+
759+ public void logInAtSelected () {
760+ ArrayList <String > languageCodes = new ArrayList <String >();
761+ int [] index = wikiTable .getSelectedRows ();
762+ for (int i : index ) {
763+ languageCodes .add (mdm .getWikiPrefix (i ));
764+ }
765+ logInAt (languageCodes );
766+ }
767+
761768 public void logInEverywhere () {
762769 logInfo ("Attempting login everywhere." );
763- for (String languageCode : mdm .getWikiPrefixes ()) {
764- logInAt (languageCode );
765- }
770+ logInAt (mdm .getWikiPrefixes ());
771+ }
772+
773+ private void logInAt (final ArrayList <String > languageCodes ) {
774+ pushWorker = new SwingWorker <Void , Void >() {
775+ @ Override
776+ public Void doInBackground () {
777+ for (String languageCode : languageCodes ) {
778+ logInAt (languageCode );
779+ }
780+
781+ return null ;
782+ }
783+
784+ @ Override
785+ protected void done () {
786+
787+ }
788+ };
789+
790+ pushWorker .execute ();
766791 }
767792
768793 private void logInAt (String languageCode ) {
769- boolean success = logIn (new User (botUsername , languageCode ), botPassword );
794+ boolean success = logIn (new User (languageCode , botUsername ), botPassword );
770795
771796 if (success ) {
772797 logInfo ("Logged in at: " + languageCode );
@@ -778,4 +803,4 @@ private void logInAt(String languageCode) {
778803 logWarning ("Log in failed at: " + languageCode );
779804 }
780805 }
781- }
806+ }
0 commit comments