Java uygulamasından programın içinden nasıl çıkılır


146

Bir Java uygulamasından kodla çıkmanın en iyi yolu nedir?


1
Hmm. Bence soru çok genel olabilir. Hangi koşullarda çıkılır?
Allen George

3
Tüm arka plan programı olmayan iş parçacıklarınızın normal şekilde bitmesine izin verin?
Thorbjørn Ravn Andersen

Yanıtlar:


193

System.exit()Bu amaçla kullanabilirsiniz .

Oracle'ın Java 8 belgelerine göre:

public static void exit(int status)

Şu anda çalışan Java Virtual Machine'i sonlandırır. Argüman bir durum kodu görevi görür; kural olarak, sıfırdan farklı bir durum kodu anormal sonlandırmayı gösterir .

Bu yöntem, Runtime sınıfındaki çıkış yöntemini çağırır. Bu yöntem asla normal şekilde geri dönmez.

Çağrı System.exit(n)etkin bir şekilde çağrıya eşdeğerdir:

Runtime.getRuntime().exit(n)


103
System.exit(0);

"0", programınızı arayan kişinin her şeyin yolunda gittiğini bilmesini sağlar. Ancak, bir hata nedeniyle çıkıyorsanız, yapmalısınız System.exit(1);veya belirli hataya karşılık gelen sıfır olmayan başka bir sayı ile.

Ayrıca, diğerlerinin de söylediği gibi, önce temizleyin! Bu, dosyaları ve diğer açık kaynakları kapatmayı içerir.


System.exit (1) olduğunu sanıyordum?
AFK

14
Chris'in belirttiği gibi System.exit(1)(veya başka bir sayı), bir hata nedeniyle kapandığını belirtmek istiyorsanız. System.exit(0)programın normal şekilde kapandığını gösterir. 1'i istediğiniz herhangi bir sayıya da değiştirebilirsiniz, ardından uygulamanızı bir komut dosyasından çalıştırırken bir hata olup olmadığını belirleyebilirsiniz.
StormPooper

10

System.exit(int i)kullanılacak olan, ama daha genel içine yer alacağını shutdown()Eğer, soket bağlantıları, dosya tanımlayıcılar kapanış sıra "temizleme" adımları, yer alacağını yöntemle, daha sonra birlikte çıkarken System.exit(x).


6

System.exit() genellikle en iyi yol değildir, ancak uygulamanıza bağlıdır.

Bir uygulamayı sonlandırmanın olağan yolu, main()yöntemden çıkmaktır . Grafik kullanıcı arayüzü (AWT, Swing vb.) Olan uygulamalarda olağan olduğu gibi, çalışan diğer deamon olmayan iş parçacıkları olduğunda bu çalışmaz. Bu uygulamalar için, GUI olay döngüsünü sonlandırmanın bir yolunu bulursunuz (bunun AWT veya Swing ile mümkün olup olmadığını bilmiyorsunuz) veya çağırırsınız System.exit().


4

Kullanmak dispose();, programlarınızı kapatmak için çok etkili bir yoldur.

Kullanmanın System.exit(x)etkileşimler bölmesini sıfırladığını ve oradaki bilgilerin bir kısmına ihtiyacınız olduğunu varsayarsak tümünün kaybolduğunu buldum .


3

Jon'a katılıyorum, uygulamanızın bir şeye tepki vermesini sağlayın ve System.exit () 'i arayın.

Şunlardan emin olun:

  • uygun çıkış değerini kullanırsınız. 0 normal çıkış, başka herhangi bir şey bir hata olduğunu gösterir
  • tüm giriş ve çıkış akışlarını kapatırsınız. Dosyalar, ağ bağlantıları vb.
  • özellikle bir hatadan kaynaklanıyorsa çıkış nedenini günlüğe kaydediyor veya yazdırıyorsunuz

2

Cevap System.exit (), ancak bu programı iptal ettiği için yapılacak iyi bir şey değil. Yapmayı düşündüğünüz herhangi bir temizlik, yok olmayacak.


1

Sorunun iki basit cevabı var.

"Profesyonel yol" budur:

//This just terminates the program.
System.exit(0);

Bu daha beceriksiz bir yol:

//This just terminates the program, just like System.exit(0).
return;

System.exit(0); return;aynı zamanda iyidir, dönüş, Sistem çıkış yapmadan önce herhangi bir ruther kodunun çalıştırılmasını engeller, aksi takdirde bir bayrağa ihtiyacınız olur (..i.e. if (!called_exit) { further code after exit statement }
ycomp

-1
Runtime.getCurrentRumtime().halt(0);

1
Daha İyi: Runtime.getRuntime (). Halt (0); Scala'da benim için mükemmel çalıştı!
Gerhard Hagerer

@GerhardHagerer ama ya güncel olmayan runti alırsan, ben?
Dude Bro

1
Javadoc'tan halt: "Bu yöntem son derece dikkatli kullanılmalıdır. exitYöntemden farklı olarak , bu yöntem kapatma kancalarının başlatılmasına neden olmaz ve çıkışta sonlandırma etkinleştirildiyse çağrılmayan sonlandırıcıları çalıştırmaz. Kapatma dizisi varsa zaten başlatılmışsa, bu yöntem çalışan herhangi bir kapatma kancasının veya sonlandırıcıların işlerini bitirmesini beklemez. " Kısacası kullanmanıza haltgerek kalmamalı, tercih etmelisiniz exit.
Erwin Bolwidt

-1

System.exit()ne istersen yapacak. Ancak çoğu durumda, muhtemelen bir ileti dizisinden çıkmak ve ana ileti dizisini canlı bırakmak istersiniz. Bunu yaparak, bir görevi sonlandırabilir, ancak uygulamayı yeniden başlatmadan başka bir görevi başlatma yeteneğini de koruyabilirsiniz.



-3

Bunu doğru şekilde yapmalı:

mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
mainFrame.addWindowListener(new WindowListener() {

@Override
public void windowClosing(WindowEvent e) {
    if (doQuestion("Really want to exit?")) {
      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      mainFrame.dispose();
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.