Programın zaman karmaşıklığını (time complexity) çok küçük bi değişiklikle O(N)'den O(sqrt(N))'e düşürmek mümkün:

package capanornek;

//import java.util.Arrays;
import javax.swing.JOptionPane;
//import javax.swing.JScrollPane;
//import javax.swing.JTextArea;

/**
 *
 * @author Emre ÇAPAN
 */
public class CapanOrnek{

    public static void main(String[] args) {
       int sayi = Integer.parseInt(JOptionPane.showInputDialog("Bir Sayı Giriniz")); // Ekrana mesaj kutusu ile değer alalım
       int toplam=0;
      
        for (int i = 1; i * i <= sayi; i++) { // Döngü 1 den başla, sayının köküne kadar döngüyü çalıştır
            if (sayi % i ==0) {// Sayının i'inci sayı ile modu 0 ise
                toplam+=i;//toplam değişkenine i değerini at
                if (i * i != sayi)  // i sayının tam kökü değilse sayi / i bölümünü de toplama ekle
                  toplam += sayi / i;
            }
        }
        if (sayi==toplam) {// eğer girilen sayı döngüdeki bölümlerin toplamına eşitse
            JOptionPane.showMessageDialog(null, sayi+" Mükemmel Sayıdır");
        }
        else // Değilse
              JOptionPane.showMessageDialog(null, sayi+" Mükemmel Sayı Değildir");
    }
 
}