자바 데스크탑 애플리케이션 : SWT 대 스윙 [닫기]


158

저는 웹 개발자이며 첫 번째 실제 데스크톱 응용 프로그램을 구축 할 생각입니다. 아이디어는 API를 사용할 수없는 웹 응용 프로그램에서 매우 반복적 인 작업을 자동화하는 도구를 구축하는 것입니다.

Java를 사용하고 싶다는 것을 알고 있습니다. 나는 전에 웹 물건을 위해 그것을 사용했고, 구문을 꽤 잘 알고 있으며 응용 프로그램이 가능한 한 쉽게 플랫폼 간 크로스 폼을 원합니다.

SWT 또는 Swing을 사용 해야하는지 확실하지 않은 곳입니다. 주요 사용자가 Windows를 사용함에 따라 가능한 한 기본적으로보고 싶습니다. 리눅스와 맥은 작동하지만 외관은 그다지 중요하지 않습니다.

그렇다면 각 UI 프레임 워크, Swing 또는 SWT에 대한 논쟁은 무엇입니까?

감사.

추신 : 저는 Eclipse를 사용하여 Windows에서 개발합니다. 그러나 Netbeans을 가지고 노는 것에 대해 생각하고있었습니다.


어려운 질문. :-) 나는 Swing과 함께 갈 것이다. 그러나 그 결정에 대한 찬반 양론은 없습니다.
Pablo Santa Cruz

중복 Q. 스윙 대 SWT Q가 이미 요청한 것을 찾으십시오. FWIW, 나는 그 방법을 배웠기 때문에 Swing을 사용합니다. 네이티브 룩앤필 라이브러리가 있습니다 (jgoodies 룩 참조)
Jason S

"웹 애플리케이션에서 매우 반복적 인 작업을 자동화하는 도구를 구축하십시오"-이에 대한 정보가 있습니까? 기존 도구가있을 수 있으며이를 자동화하기 위해 데스크톱 앱이 필요한지 의문입니다. 현재 귀하의 경우에는 효과가있을 수 있습니다.하지만 호스팅 된 솔루션으로 전환하면 어떻게 되나요?
Nate

데스크탑 앱을위한 GUI 프레임 워크를 배울 필요는 없습니다. html css와 js를 사용할 수 있다면 Electron을 사용하여 웹 언어로 네이티브 앱을 만들 수 있습니다.
Pranav A.

Electron은 내가이 질문을한지 몇 년 후에 발명되었습니다.) 물론 오늘날 여러분은 맞습니다.
janpio

답변:


152

프로 스윙 :

  • 자바 라이브러리의 일부, 추가 네이티브 라이브러리 필요 없음
  • 모든 플랫폼에서 동일한 방식으로 작동
  • Netbeans 및 Eclipse의 통합 GUI 편집기
  • Sun / Oracle의 훌륭한 온라인 자습서
  • 공식 Java 확장 (예 : java OpenGL)에서 지원

단점 스윙 :

  • 기본 모양과 느낌은 실제 기본 시스템과 다르게 작동 할 수 있습니다.
  • 무거운 구성 요소 (native / awt)는 스윙 구성 요소를 숨 깁니다. 무거운 구성 요소를 사용하는 것이 드물기 때문에 대부분 문제가되지 않습니다.

장점 SWT :

  • 가능한 경우 기본 요소를 사용하므로 항상 기본 동작
  • 이클립스, GUI 편집기 VEP (VEP는 Swing 및 AWT도 지원)
  • 많은 수의 예제 온라인
  • awt 및 swing 구성 요소를 사용할 수 있도록 awt / swt 브리지가 통합되어 있음

단점 SWT :

  • 지원되는 시스템마다 기본 라이브러리가 필요합니다.
  • 사용 된 기본 자원 (힌트 옵션)으로 인해 모든 시스템에서 모든 동작을 지원하지는 않습니다.
  • 네이티브 구성 요소는 종종 부모와 함께 처리되지만 글꼴과 같은 다른 리소스는 수동으로 해제하거나 자동 해제를 위해 구성 요소에 대한 리스너로 처리해야합니다.

33
스윙은 "한 번 쓰고 어디서나 실행"에 더 가깝습니다. SWT는 "한 번 쓰기, 모든 위치 조정 / 테스트"와 유사합니다. 그러나이 같은 논의는 다른 언어에서도 발생했습니다.
Mark

12
현실적으로 Swing의 "네이티브"룩앤필은 내 Gnome 데스크탑과 상당히 다르게 작동합니다. 어떤 이유로 테마가 제대로 작동하면 메뉴가 끔찍하고 거의 사용할 수 없습니다.
Hut8

9
Eclipse 3.7부터 VEP는 WindowBuilder (Swing 및 SWT를 모두 지원)로 대체되었습니다.
Alexey Romanov

6
SWT의 장점은 기본 구성 요소로 인해 메모리 소비가 적다는 것입니다. 이는 메모리가 제한적인 시스템에서 바람직해야하며 스윙과 swt 간의 메모리 차이가 큰 GUI 설계에서 클 수 있습니다.
jantobola

1
@JanTobola 그것은 틀렸다. 기본 구성 요소는 Java 힙뿐만 아니라 기본 힙에 할당 된 메모리를 사용합니다. Netbeans Platform, Eclipse RCP, SWT 및 Swing을 사용하여 대형 GUI를 작업했습니다 .Java의 초기 버전에서 Swing의 메모리 풋 프린트와 관련하여 심각한 문제가있었습니다 (제 3 자 라이브러리 일 때와 1.1에서 1.2까지도?) ) 그러나 더 이상 사실이 아니며 SWT에서 많은 리소스를 릴리스하는 것은 개발자의 몫입니다. SWT를 사용하면 메모리 누수가 발생할 가능성이 훨씬 많지만 참조되지 않은 구성 요소는 Swing으로 "처분"됩니다.
gouessej

63

고려해야 할 중요한 사항은 일부 사용자 및 일부 리셀러 (Dell)가 64 비트 Windows에 64 비트 VM을 설치하고 32 비트 및 64 비트 VM에서 동일한 SWT 라이브러리를 사용할 수 없다는 것입니다.

즉, 사용자에게 32 비트 또는 64 비트 Java VM이 있는지 여부에 따라 다른 패키지를 배포하고 테스트해야합니다. 참고 이 문제를예를 들어 Azureus 를 . 그러나 현재는 프론트 다운로드 페이지의 빌드가 64 비트 VM에서 실행되지 않는 Eclipse에서도 있습니다.


2
흥미로운 점. 사용자로서 나는 이것이 왜 그렇게 중요한지 여전히 비틀 거리고 있습니다. 그러나 글쎄, 그래서 나는 이것을 고려해야합니다. 감사.
janpio

btw : 64 IMHO에서 javaws (웹
스타트)를

1
@Karussell : 2011 년 3 월 4 일 현재 썬의 Windows 용 64 비트 JVM은 JNLP를 지원합니다. 나는 그것이 한동안 사실이라고 생각하지만 얼마나 오래되었는지는 확실하지 않습니다.
연금술사

23

프로 스윙 :

  • 스윙 IMHO의 가장 큰 장점은 라이브러리를 응용 프로그램과 함께 제공 할 필요가 없다는 것입니다 (수십 MB (!)를 피함).
  • 기본 모양과 느낌이 초기보다 스윙에 훨씬 좋습니다
  • 성능은 swt와 비슷합니다 (스윙은 느리지 않습니다!)
  • NetBeans는 Matisse를 편안한 컴포넌트 빌더로 제공합니다.
  • JavaFX 내에서 Swing 구성 요소의 통합이 더 쉽습니다.

그러나 결론적으로 나는 '순수한'스윙 또는 swt를 사용하지 않는 것이 좋습니다 ;-) 스윙 / 스 wt 아웃을위한 몇 가지 애플리케이션 프레임 워크가 있습니다. 여기를보십시오 . 가장 큰 플레이어는 넷빈 (스윙)과 이클립스 (swt)입니다. 또 다른 좋은 프레임 워크는 그리폰 일 수 있고 멋진 '구성 요소 세트'는 피벗 (스윙)입니다. Griffon은 많은 라이브러리를 통합하고 스윙뿐만 아니라 매우 흥미 롭습니다. . 피벗, swt 등


1
NetBeans는 Matisse를 GUI 빌더로 사용하지만, 코드는 실제로 장황하고 읽기가 어렵고 소스 코드로 편집하기가 불가능합니다. GUI 빌더를 정말로 원한다면 이클립스 WindowBuilder
Pranav A를 사용하십시오.

13

몇 가지 이유로 Swing을 사용합니다.

  • 더 오래되었고 더 많은 노력이 적용되었습니다. 따라서 더 많은 기능이 완성되고 버그가 적을 수 있습니다.

  • 성능이 뛰어난 응용 프로그램을 만드는 방법에 대한 많은 설명서와 기타 지침이 있습니다.

  • Swing에 대한 변경 사항이 모든 플랫폼에 동시에 전파되는 것처럼 보이며 SWT에 대한 변경 사항은 Windows에 먼저 나타난 다음 Linux에 나타납니다.

기능이 풍부한 응용 프로그램을 구축하려면 NetBeans RCP 를 확인하십시오. (Rich Client Platform) . 학습 곡선이 있지만 약간의 연습으로 멋진 응용 프로그램을 신속하게 구성 할 수 있습니다. Eclipse 플랫폼에 대한 충분한 경험이 없어서 올바른 판단을 내릴 수 없습니다.

전체 RCP를 사용하지 않으려는 경우 NetBeans에는 독립적으로 꺼내서 사용할 수있는 유용한 구성 요소가 많이 있습니다.

또 다른 조언은 다른 레이아웃 관리자를 살펴보십시오. 내가 배우는 동안 그들은 오랫동안 저를 넘어 뜨 렸습니다. 최고 중 일부는 표준 라이브러리에도 없습니다. MigLayout 와 (스윙과 SWT 모두) JGoodies의 양식 도구는 내 의견에 가장 좋은 두 가지입니다.



8

요구 사항의 경우 SWT만큼 기본 플랫폼과 밀접하게 통합되지 않고 시작하기가 약간 쉬우므로 요점은 Swing을 사용하는 것처럼 들립니다.

스윙은 일반적으로 안전한 내기입니다.


6

흥미로운 질문입니다. SWT를 잘 모르겠다 (Swing 및 AWT와 달리) SWT / Swing / AWT에 대한 비교는 다음과 같습니다.

http://www.developer.com/java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm

다음은 기본적으로 SWT에 대한 자습서를 얻을 수있는 사이트입니다 ( http://www.java2s.com/Tutorial/Java/0280__SWT/Catalog0280__SWT.htm ).

올바른 결정을 내리기를 바랍니다 (코딩에 올바른 결정이있는 경우) ... :-)


4
그러나이 기사는 2003 년의 기사입니다.
Alexey Romanov

4

소수 이상의 기능을 갖춘 완전한 기능의 응용 프로그램을 구축하려는 경우 Eclipse RCP를 프레임 워크로 사용하는 것이 좋습니다.

응용 프로그램이 너무 커지지 않거나 요구 사항이 너무 독특하여 일반 비즈니스 프레임 워크에서 처리 할 수없는 경우 Swing으로 안전하게 이동할 수 있습니다.

하루가 끝나면 두 가지 기술을 모두 사용하여 더 적합한 것을 찾으십시오. Netbeans vs Eclipse vs IntelliJ와 마찬가지로 여기에는 절대적인 정답이 없으며 두 프레임 워크 모두 고유 한 단점이 있습니다.

프로 스윙 :

  • 더 많은 전문가
  • Java와 같은 것 (공개 필드가 거의 없으며 리소스를 폐기 할 필요가 없음)

프로 SWT :

  • 더 많은 OS 네이티브
  • 더 빠른

10
"빠른"포인트는 매우 논쟁적인 부분이라고 생각합니다.
Russ Hayward

SWT는 사용하기가 번거롭고 Windows의 각 버전으로 GUI를 테스트해야했으며 일부 버그는 Windows Vista에서만 재현 할 수있었습니다. 일부 메소드는 단순히 구현되지 않거나 AWT를 호출하여 SWT를 손상시킬 위험없이 AWT 및 Swing없이 소형 JRE를 사용할 수 없음을 의미합니다. 나는 2009 년에 SWT를 사용하기 시작했으며 겸손한 의견으로는 더 빠르지 않습니다. 신중하게 설계된 벤치 마크를 제공하는 것이 좋습니다.
gouessej

4

고려해야 할 사항 : 스크린 리더

어떤 이유로 스크린 리더 (및 Windows 용 Java AccessBridge)를 사용할 때 일부 Swing 구성 요소가 제대로 작동하지 않습니다. 각기 다른 스크린 리더는 다른 행동을하게됩니다. 그리고 내 경험상 SWT-Tree는 스크린 리더와 함께 Swing-Tree보다 훨씬 뛰어납니다. 따라서 우리의 응용 프로그램은 SWT와 Swing 구성 요소를 모두 사용했습니다.

적절한 SWT 라이브러리를 배포하고로드하는 경우이 링크가 유용 할 수 있습니다. http://www.chrisnewland.com/select-correct-swt-jar-for-your-os-and-jvm-at-runtime-191


3

SWT는 세기의 전환기에 스윙의 부진에 대한 응답으로 만들어졌습니다. 성능의 차이를 무시할 수있게되었으므로 Swing이 표준 응용 프로그램에 더 적합한 옵션이라고 생각합니다. SWT / Eclipse에는 많은 보일러 플레이트 코드를 지원하는 멋진 프레임 워크가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.