Kerugian apa yang dimiliki framework Java Swing GUI? [Tutup]


11

Saya telah menggunakan Java Swing untuk beberapa aplikasi desktop. Tapi saya belum pernah menggunakan kerangka kerja GUI lain sehingga saya tidak bisa membandingkannya.

Pasti ada beberapa hal yang saya sukai dengan Swing dan beberapa yang tidak saya sukai, tapi itulah situasi dengan hampir semua hal.

Apa kelemahan terbesar dengan kerangka kerja Java Swing GUI?


2
Pertanyaannya adalah interresting. Saya juga bertanya-tanya apa kekuatan dan kelemahan Swing, dibandingkan dengan QT, GTK, SWT, Winforms, Cocoa, dan sejenisnya. Mungkin Anda harus mengulangi judul untuk meminta perbandingan , daripada kelemahan (yang cenderung membawa jawaban yang tidak diperdebatkan)
barjak

Jawaban:


3
  1. Anda harus menginstal java di suatu tempat. Ini berlaku untuk semua kerangka kerja GUI, tetapi java memiliki persepsi tentang gorila 2 ton. Sudah mendapatkan banyak yang lebih baik, tetapi hari-hari applet java awal mematikan banyak orang. Jika Anda hanya membutuhkannya untuk menjalankan satu aplikasi Anda, itu adalah banyak pemeliharaan untuk tetap up to date dengan patch keamanan dan sejenisnya. Semua orang pasti memiliki Flash untuk youtube, .Net framework dipasang di belakang layar dan semua orang telah mengaktifkan javascript di browser mereka. Java biasanya merupakan hal ekstra untuk dilakukan.

  2. Semua itu seperti menulis-sekali, jalankan di mana saja, Anda masih menemukan bahwa Mac OSX tidak memiliki hal bermodel baru yang ingin Anda gunakan atau satu klien menolak untuk memutakhirkan mandrake linux mereka melewati JRE 1.4.

  3. Sebagai seorang dev, Anda harus memikirkan tentang threading. Dan itu dengan cara yang rumit, karena multi-threading dimungkinkan tetapi ayunan berpura-pura seperti itu semua berulir tunggal. Tapi kemudian setengah perpustakaan yang Anda tarik memiliki beberapa tingkat multi-threading dan menganggap bahwa Anda tahu tentang EDT invokeLater dan itu memaksa banyak pelajaran dengan cara yang sulit.

  4. Pengalaman swing tidak mudah ditransfer ke jenis pengembangan UI lainnya. Misalnya jika Anda jagoan di tabel dalam .css, Anda akan sepenuhnya terhalang oleh Jtables, renderers, editor, dll.

Secara umum, masalah utama dengan Swing adalah bahwa itu tidak sesuai dengan bagaimana dipasarkan. Ini adalah teknologi yang sangat memadai untuk banyak kasus penggunaan, tetapi mereka 5 atau 6 tahun pertama penuh dengan implementasi yang mengerikan dan applet yang mengerikan. Dan sekarang teknologi lama - ke Web 3.0 atau apa pun.

Semua yang dikatakan, saya suka Swing dan berpikir pro umumnya lebih besar daripada kontra ketika Anda membutuhkan apa yang ditawarkannya. Namun pengalaman web begitu di mana-mana sekarang bahwa banyak pengguna akan memiliki waktu yang lebih mudah dengan aplikasi web daripada aplikasi ayunan menakjubkan yang paling ramping. Dan ada aplikasi Swing yang bagus di luar sana, tetapi tampaknya tidak menjadi arus utama.


1
Saya berada dalam situasi yang sama dari OP: Saya tahu Swing dan saya tertarik membandingkannya dengan GUI lain. Bagi saya, poin 1, 2 dan 4 tidak relevan dengan pertanyaan. Jadi, saya ingin bereaksi pada poin 3: bisakah Anda memberikan beberapa contoh toolkit GUI multithread, tolong? Terima kasih.
barjak

2
@barjak: GUI multithreaded adalah sebuah kesalahan. Satu-satunya yang saya tahu adalah Java AWT lama. Tetapi mereka belajar dari kesalahan ketika mereka mendesain Swing, yang merupakan single threaded karena semua kerangka kerja GUI modern.
Jonas

@Jonas Membuat pengembang berpikir tentang multithreading sering merupakan kesalahan, tetapi Anda tidak dapat menjalankan animasi, membuat panggilan RMI, atau melakukan perhitungan yang intens (ini adalah toolkit klien yang gemuk, ingat) tanpa beberapa tingkat multithreading.
Steve Jackson

3
@Steve: Itu benar. Tetapi Anda tidak harus melakukan panggilan RMI dan perhitungan intens di utas GUI. Hal-hal semacam itu harus dilakukan di latar belakang, seperti pada Swing dan WPF.
Jonas

@barjak - Bentuk Windows, MFC, SWT, pyQT, Juce .... Saya mengalami kesulitan memikirkan yang tidak multi-threaded. Namun, aturan yang sama umumnya berlaku, Anda tidak dapat menyentuh komponen GUI Anda kecuali dari utas yang membuatnya.
Steve Jackson

2

Jonas,

Swing membuat generalisasi arsitektur dasar Anda untuk memberi Anda pengalaman pengguna platform netral. Satu-satunya komponen kelas berat (disediakan oleh OS) adalah wadah JFrame dan sisanya cukup banyak ditangani oleh Swing Takeit. AWT di sisi lain, meminta OS untuk menggambar semua komponen UI yang berarti lebih cepat dalam banyak hal karena Anda menggunakan komponen UI asli khusus untuk OS. SWT mencoba mencapai jalan tengah, untuk berbagai komponen standar seperti tombol dan label (yang tersedia di sebagian besar OS), ini memungkinkan OS menangani itu dan untuk komponen khusus lainnya, SWT akan menangani kreasi untuk Anda.

Konon, saya bisa menguraikan kelemahannya.

(1) Karena toolkit membuat dan merender komponen untuk Anda alih-alih bertanya pada OS, Anda tidak bisa memanfaatkan kecepatan komponen bawaan yang disediakan oleh OS.

(2) UI tidak terlalu tegas karena terlihat asing bagi kebanyakan platform OS tentang apa yang terlihat dan terasa apa yang Anda gunakan.

(3) Beberapa manajer tata letak yaitu GridBadLayout dll dapat disederhanakan dengan lebih baik. Saya telah kehilangan hitungan jumlah proyek yang saya kerjakan di mana orang telah membungkus GridBagLayout dalam beberapa kode yang dipesan lebih dahulu untuk mendapatkan cara yang lebih sederhana untuk menggunakannya.

Saya akan menyarankan Anda untuk menulis aplikasi sederhana di AWT, Swing dan SWT dan membandingkan pendekatan pengembangan dengan produk akhir di antara mereka semua, kemudian meninjau berbagai komentar yang dibuat dari pengembang lain dan memutuskan mana yang paling berhasil. Saya telah bekerja dengan Swing selama bertahun-tahun dan saya menggunakan SWT yang tidak disukai, tetapi saya menyadari bahwa Swing jauh lebih rumit daripada yang seharusnya bila dibandingkan dengan framework lain di luar sana.


4
Swing adalah akselerasi GPU , yang tidak sering menggunakan framework asli, jadi saya benar-benar berpikir bahwa Swing lebih cepat. Ini juga merupakan strategi yang dimiliki WPF pada Windows tetapi tidak pada WinForms (hanya pada beberapa versi Windows). Bagaimana "[jelek] ... tentang apa yang terlihat dan terasa Anda gunakan" benar ketika itu sangat dapat disesuaikan atau Anda dapat menggunakan platform sendiri LaF? Saya setuju bahwa manajer tata letak benar-benar buruk.
Jonas

Jonas, Ini aspek "disesuaikan" dari ayunan yang membuatnya rumit dibandingkan dengan kerangka kerja lain. Jika Anda mencoba untuk abstrak dari fitur yang diberikan OS kepada Anda, maka Anda kehilangan banyak manfaat yang ditawarkannya. Versi pertama Swing adalah mimpi buruk, yang menyebabkan penciptaan SWT di tempat pertama. Kemudian Swing ditingkatkan menjadi jauh lebih cepat dan Anda memiliki kelas seperti SwingUtilities yang menawarkan dukungan threading yang lebih baik untuk GUI.
Desolate Planet

Jelek mungkin kata yang salah; alien mungkin kata yang lebih baik karena tampilan dan rasa tidak persis sama dengan tampilan dan rasa UI asli, dari yang saya ingat, Anda punya Java, motif, logam dan beberapa lainnya, tetapi secara umum, mereka tidak t cantik sekali.
Desolate Planet

Hal berikutnya yang harus dilihat ketika melakukan perbandingan adalah upaya yang dilakukan dalam mengembangkan UI. Saya tidak akan mengatakan manajer tata letak benar-benar buruk, ada lebih baik daripada tidak ada tata letak sama sekali (yang harus saya hadapi dalam pekerjaan pada perangkat seluler), tetapi mereka tidak berusaha menyederhanakan model.
Desolate Planet

Saya pikir berdasarkan apa yang Anda katakan, Anda telah menggunakan versi Swing yang lebih baru, tetapi ketika pertama kali keluar, orang-orang sangat tidak menyukainya dan terlebih lagi ketika mereka mencoba menyediakan applet berbasis Swing. Ada banyak sejarah kerangka kerja UI yang dikembangkan di Jawa dan ini merupakan bacaan yang menarik jika Anda melihatnya.
Desolate Planet

-2

Ayunan lambat (kinerja buruk), sulit / canggung untuk digunakan (dibandingkan dengan banyak lainnya) dan tidak terlihat sangat baik, bahkan sangat buruk, pada beberapa platform.


5
Saya menemukannya cepat (memiliki akselerasi GPU, dibandingkan dengan banyak GUI asli) jadi saya tidak bisa setuju dengan kinerjanya atau apakah Anda punya contoh? Bagaimana itu sulit dan canggung dibandingkan dengan kerangka kerja lain? Saya setuju bahwa itu tidak terlihat bagus tetapi dapat dikonfigurasi agar terlihat seperti aplikasi asli atau menggunakan LaF kustom.
Jonas

Tampaknya kurang lebih selalu bukan asli pada GTK. Apa yang saya dengar adalah karena ini bergantung pada Java 2D untuk menggambar widget, lambat, tapi saya tidak bisa membuktikannya. Baik Qt dan GTK terasa kurang canggung bagi saya, tetapi rasanya berbeda.
Anto

Ah, itu mungkin berkinerja lebih buruk pada beberapa platform. Saya hanya menggunakannya pada Windows di mana GPU dipercepat dan sangat cepat.
Jonas

6
Orang-orang masih mengeluh bahwa ada sesuatu yang tidak terlihat asli, saat menggunakan lebih banyak hal browser (pikirkan: stackexchange), di mana setiap halaman terlihat berbeda? Dan kecepatan? Sebagian besar waktu, program GUI interaktif menunggu pengguna.
pengguna tidak diketahui

2
Sebagian besar program "trendi" tidak terlihat asli lagi. Ayunan berakhir tidak lebih baik atau lebih buruk dalam hal itu. Performa aplikasi swing 50kloc kami (klien gemuk) tampaknya baik-baik saja. Jauh lebih mudah untuk mendapatkan ayunan ke titik tidak menabrak daripada aplikasi "asli".
Tim Williscroft
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.