@@ -399,26 +399,48 @@ private JPanel createFooterPanel() {
399399 */
400400 private void performPreOperationCheck () {
401401 stepIndicator .setCurrentStep (0 );
402+ updateStatus (I18nUtil .getMessage (MessageKeys .GIT_DIALOG_CHECKING_STATUS_AND_CONFLICT ), "icons/refresh.svg" , Color .BLUE );
403+
404+ // 禁用执行按钮,防止在检查期间执行操作
405+ executeButton .setEnabled (false );
406+
407+ // 使用 SwingWorker 在后台线程执行 Git 检查,避免阻塞 UI
408+ SwingWorker <GitStatusCheck , Void > worker = new SwingWorker <>() {
409+ @ Override
410+ protected GitStatusCheck doInBackground () {
411+ try {
412+ CredentialsProvider credentialsProvider = null ;
413+ SshCredentialsProvider sshCredentialsProvider = null ;
414+ if (workspace .getGitAuthType () != null ) {
415+ credentialsProvider = workspaceService .getCredentialsProvider (workspace );
416+ sshCredentialsProvider = workspaceService .getSshCredentialsProvider (workspace );
417+ }
418+ return checkGitStatus (workspace .getPath (), operation .name (), credentialsProvider , sshCredentialsProvider );
419+ } catch (Exception e ) {
420+ log .error ("Failed to check git status" , e );
421+ return null ;
422+ }
423+ }
402424
403- SwingUtilities .invokeLater (() -> {
404- try {
405- updateStatus (I18nUtil .getMessage (MessageKeys .GIT_DIALOG_CHECKING_STATUS_AND_CONFLICT ), "icons/refresh.svg" , Color .BLUE );
406- CredentialsProvider credentialsProvider = null ;
407- SshCredentialsProvider sshCredentialsProvider = null ;
408- if (workspace .getGitAuthType () != null ) {
409- credentialsProvider = workspaceService .getCredentialsProvider (workspace );
410- sshCredentialsProvider = workspaceService .getSshCredentialsProvider (workspace );
425+ @ Override
426+ protected void done () {
427+ try {
428+ statusCheck = get ();
429+ if (statusCheck != null ) {
430+ displayStatusCheck (statusCheck );
431+ displayFileChangesStatus ();
432+ stepIndicator .setCurrentStep (1 );
433+ updateStatus (I18nUtil .getMessage (MessageKeys .GIT_DIALOG_STATUS_CHECK_DONE ), "icons/check.svg" , new Color (34 , 139 , 34 ));
434+ } else {
435+ updateStatus (I18nUtil .getMessage (MessageKeys .GIT_DIALOG_STATUS_CHECK_FAILED , "Unknown error" ), "icons/warning.svg" , Color .RED );
436+ }
437+ } catch (Exception e ) {
438+ log .error ("Failed to perform pre-operation check" , e );
439+ updateStatus (I18nUtil .getMessage (MessageKeys .GIT_DIALOG_STATUS_CHECK_FAILED , e .getMessage ()), "icons/warning.svg" , Color .RED );
411440 }
412- statusCheck = checkGitStatus (workspace .getPath (), operation .name (), credentialsProvider , sshCredentialsProvider );
413- displayStatusCheck (statusCheck );
414- displayFileChangesStatus ();
415- stepIndicator .setCurrentStep (1 );
416- updateStatus (I18nUtil .getMessage (MessageKeys .GIT_DIALOG_STATUS_CHECK_DONE ), "icons/check.svg" , new Color (34 , 139 , 34 ));
417- } catch (Exception e ) {
418- log .error ("Failed to perform pre-operation check" , e );
419- updateStatus (I18nUtil .getMessage (MessageKeys .GIT_DIALOG_STATUS_CHECK_FAILED , e .getMessage ()), "icons/warning.svg" , Color .RED );
420441 }
421- });
442+ };
443+ worker .execute ();
422444 }
423445
424446 /**
0 commit comments