포스트

2020-12-01-TIL

2020.12.01 TIL

Swing 창 다루기

JFrame과 JDialog의 차이

JFrame은 제목 표시줄과 최소화, 최대화 버튼을 가진 독립적인 최상위 창이고, 보통 애플리케이션의 메인 창이 된다. JDialog는 소유자(owner) 창에 딸린 보조 창이다. 소유자가 최소화되거나 닫히면 함께 숨겨지고, 모달(modal)로 만들면 대화상자가 닫힐 때까지 다른 창의 입력을 막는다. 설정 창이나 확인 창처럼 잠깐 띄웠다가 결과를 받아 닫는 화면은 JDialog가 맞다.

  • https://stackoverflow.com/questions/5552833/what-is-the-difference-between-a-jframe-and-a-jdialog

dispose()와 EXIT_ON_CLOSE

setDefaultCloseOperation()은 사용자가 창의 닫기 버튼을 눌렀을 때의 동작을 정한다. EXIT_ON_CLOSE는 System.exit()를 호출해 JVM 전체를 끝내고, DISPOSE_ON_CLOSE는 그 창의 네이티브 자원만 해제한다(dispose()와 같다). 화면에 표시 가능한 마지막 창까지 dispose되고 다른 비데몬 스레드가 없으면 JVM도 자연스럽게 종료된다. 그래서 창이 여러 개인 프로그램에서 보조 창에 EXIT_ON_CLOSE를 걸면 보조 창 하나를 닫았을 뿐인데 프로그램 전체가 꺼진다. 보조 창은 DISPOSE_ON_CLOSE, 메인 창만 종료 동작을 거는 것이 일반적이다.

  • https://stackoverflow.com/questions/30889542/dispose-vs-setdefaultcloseoperationjframe-exit-on-close

Swing 캘린더 컴포넌트

Swing에는 달력이나 주간 일정 뷰 컴포넌트가 기본으로 없다. 직접 만들려면 요일을 열로, 시간을 행으로 하는 격자를 JPanel과 레이아웃 매니저로 구성하고 일정 블록을 그 위에 그린다. 링크의 질문은 주간 뷰를 직접 만드는 방법을 다루고, MiG Calendar는 이런 일정 컴포넌트를 상용으로 제공하던 라이브러리다.

  • https://stackoverflow.com/questions/27584520/how-to-create-a-calendar-week-view-component-in-swing
  • https://dzone.com/articles/mig-calendar-v66-released
  • http://www.migcalendar.com/

Add custom sound in macOS

macOS 알림음을 직접 만든 소리로 바꾸는 방법을 찾아본 기록이다. 메시지 앱의 알림음은 /System/Library/PrivateFrameworks/ToneLibrary.framework/Versions/A/Resources/AlertTones/ 아래에 있는데, Apple 커뮤니티 답변에 따르면 이 폴더에 새 파일을 추가해도 시스템이 무시한다. 남는 우회 방법은 같은 형식의 소리 파일을 만들어 기존 알림음과 같은 이름으로 바꿔치기하는 것뿐이고, 이때 아래의 권한 문제가 생긴다.

  • https://discussions.apple.com/thread/250270370
  • https://discussions.apple.com/thread/6692301
  • https://www.youtube.com/watch?v=Zln-AdG5ark
  • https://www.youtube.com/watch?v=fGkp5MzA3R4

Operation not permitted

El Capitan부터 들어간 SIP(System Integrity Protection)는 /System, /usr, /bin, /sbin, /var와 기본 설치 앱을 보호한다. Apple 문서는 SIP가 root 계정까지 제한해서 보호 영역에서 할 수 있는 동작을 막는다고 설명한다. 그래서 sudo나 root로 들어가도 /System 아래 파일을 바꾸려 하면 “Operation not permitted”가 난다.

  • https://stackoverflow.com/questions/32659348/operation-not-permitted-when-on-root-el-capitan-rootless-disabled

User root in macOS

macOS의 root 계정은 기본적으로 비활성화되어 있고, 디렉터리 유틸리티에서 활성화하거나 sudo로 일시적으로 권한을 얻는다. 위에서 본 것처럼 root라도 SIP 보호 영역은 바꿀 수 없다.

  • https://hun0345.tistory.com/111

카카오톡 알림음을 원하는 소리로 바꾸기

카카오톡 macOS 앱의 알림음을 바꾸는 방법을 다룬 글이다. 시스템 알림음 폴더의 파일을 원하는 소리 파일로 바꾸는 방식이라, SIP와 읽기 전용 시스템 볼륨의 영향을 받는다.

  • https://macnews.tistory.com/2541

Read-only file system (Catalina)

Catalina부터는 SIP와 별개로 시스템이 읽기 전용 볼륨에서 동작한다. Apple 문서에 따르면 macOS Catalina 이상은 “Macintosh HD”라는 별도의 읽기 전용 시스템 볼륨에서 실행되고, 사용자 데이터는 “Macintosh HD - Data” 볼륨에 저장된다. 그래서 아래 기록처럼 root로도 cp가 “Read-only file system”으로 실패한다. mount -uw /로 루트 볼륨을 쓰기 가능하게 다시 마운트한 뒤에야 복사가 됐는데, 이는 시스템 보호를 일부러 우회하는 작업이고 재부팅하면 다시 읽기 전용으로 돌아간다. 시스템 파일을 바꾸는 일은 OS 업데이트 때 덮어써질 수 있다는 점도 감안해야 한다.

  • https://superuser.com/questions/1495124/read-only-file-system-when-i-try-to-touch-in-mac-os-catalina
1
2
3
4
5
6
7
8
9
 /System/Library/PrivateFrameworks/ToneLibrary.framework/Versions/A/Resources/AlertTones/Modern  su root                                 1 ↵  1877  17:30:03
Password:
sh-3.2# cp /Users/ham/Desktop/ReceivedMessage.m4r .
cp: ./ReceivedMessage.m4r: Read-only file system
sh-3.2# mount -uw .
mount: unknown special file or file system ..
sh-3.2# mount -uw /
sh-3.2# cp /Users/ham/Desktop/ReceivedMessage.m4r .
sh-3.2#
참고한 자료외부 출처 4

외부 출처

이 글은 저작권자의 CC BY 4.0 라이선스를 따릅니다.

댓글

아직 댓글이 없습니다