Cara keluar dari aplikasi java dari dalam program


145

Apa cara terbaik untuk keluar dari aplikasi Java dengan kode?


1
Hmm. Saya pikir pertanyaannya mungkin terlalu umum. Berhenti dalam kondisi apa?
Allen George

3
Biarkan semua utas non-daemon Anda selesai dengan normal?
Thorbjørn Ravn Andersen

Jawaban:


192

Anda dapat menggunakan System.exit()untuk tujuan ini.

Menurut dokumentasi Java 8 oracle:

public static void exit(int status)

Menghentikan Java Virtual Machine yang sedang berjalan. Argumen berfungsi sebagai kode status; oleh konvensi, kode status bukan nol menunjukkan penghentian abnormal .

Metode ini memanggil metode keluar di kelas Runtime. Metode ini tidak pernah kembali secara normal.

Panggilan System.exit(n)secara efektif setara dengan panggilan:

Runtime.getRuntime().exit(n)


102
System.exit(0);

"0" membuat siapa pun yang memanggil program Anda tahu bahwa semuanya berjalan baik. Namun, jika Anda berhenti karena kesalahan, Anda harus System.exit(1);, atau dengan nomor bukan nol yang sesuai dengan kesalahan spesifik.

Juga, seperti yang disebutkan orang lain, bersihkan dulu! Itu melibatkan penutupan file dan sumber daya terbuka lainnya.


Saya pikir itu System.exit (1)?
AFK

14
Seperti yang dinyatakan Chris, System.exit(1)(atau nomor lain) adalah jika Anda ingin menunjukkan bahwa itu ditutup karena kesalahan. System.exit(0)menunjukkan bahwa program ditutup secara normal. Anda juga dapat mengubah 1 ke nomor apa pun yang Anda suka, lalu saat menjalankan aplikasi dari skrip, Anda dapat menentukan apakah ada kesalahan.
StormPooper

10

System.exit(int i)harus digunakan, tapi saya akan memasukkannya ke dalam metode yang lebih umum shutdown(), di mana Anda akan menyertakan langkah-langkah "pembersihan" juga, menutup koneksi soket, deskriptor file, lalu keluar dengan System.exit(x).


6

System.exit() biasanya bukan cara terbaik, tetapi itu tergantung pada aplikasi Anda.

Cara biasa untuk mengakhiri aplikasi adalah dengan keluar dari main()metode. Ini tidak berfungsi ketika ada thread non-deamon lain yang berjalan, seperti biasa untuk aplikasi dengan antarmuka pengguna grafis (AWT, Swing, dll.). Untuk aplikasi ini, Anda dapat menemukan cara untuk mengakhiri loop acara GUI (tidak tahu apakah itu mungkin dengan AWT atau Swing), atau memanggil System.exit().


4

Menggunakan dispose();adalah cara yang sangat efektif untuk menutup program Anda.

Saya menemukan bahwa menggunakan System.exit(x)reset panel interaksi dan seandainya Anda memerlukan beberapa informasi di sana semuanya menghilang.


3

Saya setuju dengan Jon, minta aplikasi Anda bereaksi terhadap sesuatu dan panggil System.exit ().

Pastikan bahwa:

  • Anda menggunakan nilai keluar yang sesuai. 0 keluar normal, yang lainnya menunjukkan ada kesalahan
  • Anda menutup semua input dan output stream. File, koneksi jaringan, dll.
  • Anda login atau mencetak alasan untuk keluar terutama jika itu karena kesalahan

2

Jawabannya adalah System.exit (), tetapi bukan hal yang baik untuk dilakukan karena ini membatalkan program. Setiap pembersihan, hancurkan yang ingin Anda lakukan tidak akan terjadi.


1

Ada dua jawaban sederhana untuk pertanyaan itu.

Ini adalah "Cara Profesional":

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

Ini adalah cara yang lebih clumsier:

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

System.exit(0); return;itu bagus juga, kembalinya mencegah kode ruther dari dijalankan sebelum Sistem dapat keluar, jika tidak Anda akan memerlukan bendera (..i.e. if (!called_exit) { further code after exit statement }
ycomp

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

1
Lebih baik: Runtime.getRuntime (). Halt (0); Bekerja dengan sempurna untuk saya dalam Scala!
Gerhard Hagerer

@ GerhardHagerer tetapi bagaimana jika Anda mendapatkan runti tidak saat ini, saya?
Bung Bro

1
Dari Javadoc untuk halt: "Metode ini harus digunakan dengan sangat hati-hati. Tidak seperti exitmetode ini, metode ini tidak menyebabkan kait shutdown untuk dimulai dan tidak menjalankan fininver yang tidak diikutsertakan jika finalisasi saat keluar telah diaktifkan. Jika urutan shutdown memiliki sudah dimulai maka metode ini tidak menunggu kait shutdown atau finalis yang sedang berjalan untuk menyelesaikan pekerjaan mereka. " Singkatnya, Anda tidak perlu menggunakan halt, Anda harus memilih exit.
Erwin Bolwidt

-1

System.exit()akan melakukan apa yang Anda inginkan. Tetapi dalam sebagian besar situasi, Anda mungkin ingin keluar dari utas, dan membiarkan utas utama tetap hidup. Dengan melakukan itu, Anda dapat menghentikan tugas, tetapi juga menjaga kemampuan untuk memulai tugas lain tanpa memulai ulang aplikasi.



-3

Ini harus dilakukan dengan cara yang benar:

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();
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.