5
5
import java .awt .Color ;
6
6
import java .awt .Component ;
7
7
import java .awt .Desktop ;
8
+ import java .awt .Dimension ;
8
9
import java .awt .HeadlessException ;
9
10
import java .awt .Image ;
10
11
import java .awt .Toolkit ;
23
24
import javax .swing .JCheckBox ;
24
25
import javax .swing .JFileChooser ;
25
26
import javax .swing .JOptionPane ;
27
+ import javax .swing .JScrollPane ;
26
28
import javax .swing .JTable ;
29
+ import javax .swing .JTextArea ;
27
30
import javax .swing .JTextField ;
28
31
import javax .swing .SwingUtilities ;
29
32
import javax .swing .UIManager ;
@@ -78,7 +81,7 @@ public BackupManagerGUI() {
78
81
displayBackupList (backups );
79
82
} catch (IOException ex ) {
80
83
backups = null ;
81
- Logger .logMessage (ex .getMessage ());
84
+ Logger .logMessage ("An error occurred: " + ex .getMessage (), Logger . LogLevel . ERROR , ex );
82
85
OpenExceptionMessage (ex .getMessage (), Arrays .toString (ex .getStackTrace ()));
83
86
}
84
87
@@ -154,7 +157,7 @@ private void OpenFolder(String path) {
154
157
try {
155
158
desktop .open (folder );
156
159
} catch (IOException ex ) {
157
- Logger .logMessage ("An error occurred" , Logger .LogLevel .ERROR , ex );
160
+ Logger .logMessage ("An error occurred: " + ex . getMessage () , Logger .LogLevel .ERROR , ex );
158
161
OpenExceptionMessage (ex .getMessage (), Arrays .toString (ex .getStackTrace ()));
159
162
}
160
163
} else {
@@ -317,7 +320,7 @@ private void SaveWithName() {
317
320
JOptionPane .showMessageDialog (this , "Backup '" + currentBackup .getBackupName () + "' saved successfully!" , "Backup saved" , JOptionPane .INFORMATION_MESSAGE );
318
321
savedChanges (true );
319
322
} catch (IllegalArgumentException ex ) {
320
- Logger .logMessage ("An error occurred" , Logger .LogLevel .ERROR , ex );
323
+ Logger .logMessage ("An error occurred: " + ex . getMessage () , Logger .LogLevel .ERROR , ex );
321
324
OpenExceptionMessage (ex .getMessage (), Arrays .toString (ex .getStackTrace ()));
322
325
} catch (HeadlessException ex ) {
323
326
Logger .logMessage ("Error saving backup" , Logger .LogLevel .WARN );
@@ -413,7 +416,7 @@ public void setStringToText() {
413
416
String last_date = LocalDateTime .now ().format (formatter );
414
417
lastBackupLabel .setText ("last backup: " + last_date );
415
418
} catch (Exception ex ) {
416
- Logger .logMessage ("An error occurred" , Logger .LogLevel .ERROR , ex );
419
+ Logger .logMessage ("An error occurred: " + ex . getMessage () , Logger .LogLevel .ERROR , ex );
417
420
OpenExceptionMessage (ex .getMessage (), Arrays .toString (ex .getStackTrace ()));
418
421
}
419
422
}
@@ -422,7 +425,7 @@ public void setTextValues() {
422
425
try {
423
426
updateCurrentFiedsByBackup (currentBackup );
424
427
} catch (IllegalArgumentException ex ) {
425
- Logger .logMessage ("An error occurred" , Logger .LogLevel .ERROR , ex );
428
+ Logger .logMessage ("An error occurred: " + ex . getMessage () , Logger .LogLevel .ERROR , ex );
426
429
OpenExceptionMessage (ex .getMessage (), Arrays .toString (ex .getStackTrace ()));
427
430
}
428
431
setAutoBackupPreference (currentBackup .isAutoBackup ());
@@ -499,32 +502,50 @@ public void SetLastBackupLabel(LocalDateTime date) {
499
502
public static void OpenExceptionMessage (String errorMessage , String stackTrace ) {
500
503
Object [] options = {"Close" , "Copy to clipboard" , "Report the Problem" };
501
504
502
- if (errorMessage == null ) {
505
+ if (errorMessage == null ) {
503
506
errorMessage = "" ;
504
507
}
505
508
stackTrace = !errorMessage .isEmpty () ? errorMessage + "\n " + stackTrace : errorMessage + stackTrace ;
506
- String stackTraceMessage = "Please report this error, either with an image of the screen or by copying the following error text (it is appreciable to provide a description of the operations performed before the error): \n " + stackTrace ;
509
+ String stackTraceMessage = "Please report this error, either with an image of the screen or by copying the following error text (it is appreciable to provide a description of the operations performed before the error): \n " + stackTrace ;
507
510
508
511
int choice ;
509
512
513
+ // Set a maximum width for the error message
514
+ final int MAX_WIDTH = 500 ;
515
+
510
516
// Keep displaying the dialog until the "Close" option (index 0) is chosen
511
517
do {
512
518
if (stackTraceMessage .length () > 1500 ) {
513
- stackTraceMessage = stackTraceMessage .substring (0 , 1500 ) + "..." ;
519
+ stackTraceMessage = stackTraceMessage .substring (0 , 1500 ) + "..." ;
514
520
}
515
-
516
- // Display the option dialog
521
+
522
+ // Create a JTextArea to hold the error message with line wrapping
523
+ JTextArea messageArea = new JTextArea (stackTraceMessage );
524
+ messageArea .setLineWrap (true );
525
+ messageArea .setWrapStyleWord (true );
526
+ messageArea .setEditable (false );
527
+ messageArea .setColumns (50 ); // Approximate width, adjust as necessary
528
+
529
+ // Limit the maximum width
530
+ messageArea .setSize (new Dimension (MAX_WIDTH , Integer .MAX_VALUE ));
531
+ messageArea .setPreferredSize (new Dimension (MAX_WIDTH , messageArea .getPreferredSize ().height ));
532
+
533
+ // Put the JTextArea in a JScrollPane for scrollable display if needed
534
+ JScrollPane scrollPane = new JScrollPane (messageArea );
535
+ scrollPane .setPreferredSize (new Dimension (MAX_WIDTH , 300 ));
536
+
537
+ // Display the option dialog with the JScrollPane
517
538
choice = JOptionPane .showOptionDialog (
518
539
null ,
519
- stackTraceMessage , // The detailed message or stack trace
520
- "Error..." , // The error message/title
521
- JOptionPane .DEFAULT_OPTION , // Option type (default option type)
522
- JOptionPane .ERROR_MESSAGE , // Message type (error message icon)
523
- null , // Icon (null means default icon)
524
- options , // The options for the buttons
525
- options [0 ] // The default option (Close)
540
+ scrollPane , // The JScrollPane containing the error message
541
+ "Error..." , // The error message/title
542
+ JOptionPane .DEFAULT_OPTION , // Option type (default option type)
543
+ JOptionPane .ERROR_MESSAGE , // Message type (error message icon)
544
+ null , // Icon (null means default icon)
545
+ options , // The options for the buttons
546
+ options [0 ] // The default option (Close)
526
547
);
527
-
548
+
528
549
if (choice == 1 ) {
529
550
StringSelection selection = new StringSelection (stackTrace );
530
551
Toolkit .getDefaultToolkit ().getSystemClipboard ().setContents (selection , null );
@@ -657,12 +678,14 @@ public void Clear() {
657
678
Logger .logMessage ("Event --> clear" , Logger .LogLevel .INFO );
658
679
659
680
if ((!saveChanged && !currentBackup .getBackupName ().isEmpty ()) || (!startPathField .getText ().isEmpty () || !destinationPathField .getText ().isEmpty () || !backupNoteTextArea .getText ().isEmpty ())) {
660
- int response = JOptionPane .showConfirmDialog (null , "Are you sure you want to clean the fields?" , "Confimation required" , JOptionPane .YES_NO_CANCEL_OPTION , JOptionPane .QUESTION_MESSAGE );
681
+ int response = JOptionPane .showConfirmDialog (null , "Are you sure you want to clean the fields?" , "Confimation required" , JOptionPane .YES_NO_OPTION , JOptionPane .QUESTION_MESSAGE );
661
682
if (response != JOptionPane .YES_OPTION ) {
662
683
return ;
663
684
}
664
685
}
665
686
687
+ saveChanged = false ;
688
+ setCurrentBackupName ("" );
666
689
startPathField .setText ("" );
667
690
destinationPathField .setText ("" );
668
691
lastBackupLabel .setText ("" );
@@ -713,15 +736,15 @@ private void saveFile() {
713
736
BackupOperations .updateBackupList (backups );
714
737
savedChanges (true );
715
738
} catch (IllegalArgumentException ex ) {
716
- Logger .logMessage ("An error occurred" , Logger .LogLevel .ERROR , ex );
739
+ Logger .logMessage ("An error occurred: " + ex . getMessage () , Logger .LogLevel .ERROR , ex );
717
740
OpenExceptionMessage (ex .getMessage (), Arrays .toString (ex .getStackTrace ()));
718
741
}
719
742
}
720
743
721
744
private void OpenBackup (String backupName ) {
722
745
Logger .logMessage ("Event --> opening backup" , Logger .LogLevel .INFO );
723
746
724
- if (( !saveChanged && ! currentBackup . getBackupName (). isEmpty ()) || (! startPathField . getText (). isEmpty () || ! destinationPathField . getText (). isEmpty () || ! backupNoteTextArea . getText (). isEmpty ()) ) {
747
+ if (!saveChanged ) {
725
748
int response = JOptionPane .showConfirmDialog (null , "There are unsaved changes, do you want to save them before moving to another file?" , "Confimation required" , JOptionPane .YES_NO_CANCEL_OPTION , JOptionPane .QUESTION_MESSAGE );
726
749
if (response == JOptionPane .YES_OPTION ) {
727
750
saveFile ();
@@ -742,7 +765,7 @@ private void OpenBackup(String backupName) {
742
765
backupNoteTextArea .setEnabled (true );
743
766
savedChanges (true );
744
767
} catch (IllegalArgumentException ex ) {
745
- Logger .logMessage ("An error occurred" , Logger .LogLevel .ERROR , ex );
768
+ Logger .logMessage ("An error occurred: " + ex . getMessage () , Logger .LogLevel .ERROR , ex );
746
769
OpenExceptionMessage (ex .getMessage (), Arrays .toString (ex .getStackTrace ()));
747
770
}
748
771
}
@@ -811,7 +834,7 @@ private void updateCurrentFiedsByBackup(Backup backup) {
811
834
private void NewBackup () {
812
835
Logger .logMessage ("Event --> new backup" , Logger .LogLevel .INFO );
813
836
814
- if (( !saveChanged && ! currentBackup . getBackupName (). isEmpty ()) || ( startPathField . getText (). length () != 0 || destinationPathField . getText (). length () != 0 || backupNoteTextArea . getText (). length () != 0 ) ) {
837
+ if (!saveChanged ) {
815
838
int response = JOptionPane .showConfirmDialog (null , "There are unsaved changes, do you want to save them before moving to another backup?" , "Confimation required" , JOptionPane .YES_NO_CANCEL_OPTION , JOptionPane .QUESTION_MESSAGE );
816
839
if (response == JOptionPane .YES_OPTION ) {
817
840
saveFile ();
@@ -1819,12 +1842,6 @@ private void btnTimePickerActionPerformed(java.awt.event.ActionEvent evt) {//GEN
1819
1842
JOptionPane .showMessageDialog (null , "Auto Backup has been activated\n \t From: " + startPathField .getText () + "\n \t To: " + destinationPathField .getText () + "\n Is setted every " + timeInterval .toString () + " days" , "AutoBackup" , 1 );
1820
1843
}//GEN-LAST:event_btnTimePickerActionPerformed
1821
1844
1822
- public static void main (String args []) {
1823
- java .awt .EventQueue .invokeLater (() -> {
1824
- new BackupManagerGUI ().setVisible (true );
1825
- });
1826
- }
1827
-
1828
1845
// Variables declaration - do not modify//GEN-BEGIN:variables
1829
1846
private javax .swing .JCheckBoxMenuItem AutoBackupMenuItem ;
1830
1847
private javax .swing .JMenu Backup ;
0 commit comments