Search

Platform

JavaFX Platform 클래슀

μ£Όμš” λ©”μ†Œλ“œ 정리

κ°œμš”

β€’
νŒ¨ν‚€μ§€: javafx.application.Platform
β€’
μ—­ν• :
JavaFX μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μŠ€λ ˆλ“œ μ œμ–΄, μ’…λ£Œ, UI μž‘μ—… μ˜ˆμ•½ 등을 κ΄€λ¦¬ν•˜λŠ” 클래슀
(λͺ¨λ“  λ©”μ„œλ“œλŠ” static)
JavaFX Application Thread(메인 UI μŠ€λ ˆλ“œ)μ—μ„œ μ‹€ν–‰λ˜λŠ” μž‘μ—…μ„ μ œμ–΄ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€.

μ£Όμš” λ©”μ†Œλ“œ

1. runLater(Runnable runnable)

β€’
μ„€λͺ…:
μ§€μ •ν•œ μž‘μ—…μ„ JavaFX Application Threadμ—μ„œ λ‚˜μ€‘μ— μ‹€ν–‰ν•˜λ„λ‘ μ˜ˆμ•½ν•œλ‹€.
β€’
μš©λ„:
UIκ°€ μ™„μ „νžˆ μ΄ˆκΈ°ν™”λœ 후에 μ‹€ν–‰ν•˜κ±°λ‚˜, λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμ—μ„œ UIλ₯Ό μˆ˜μ •ν•  λ•Œ μ‚¬μš©.
β€’
μ˜ˆμ‹œ:
Platform.runLater(() -> { label.setText("UI λ³€κ²½ μ™„λ£Œ!"); });
Java
볡사

2. exit()

β€’
μ„€λͺ…:
JavaFX μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ’…λ£Œν•œλ‹€.
λ‚΄λΆ€μ μœΌλ‘œ λͺ¨λ“  μœˆλ„μš°(Stage)λ₯Ό λ‹«κ³  Application.stop() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
β€’
μ˜ˆμ‹œ:
Platform.exit();
Java
볡사

3. startup(Runnable runnable)

β€’
μ„€λͺ…:
JavaFX λŸ°νƒ€μž„μ΄ 아직 μ‹œμž‘λ˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œ λͺ…μ‹œμ μœΌλ‘œ μ΄ˆκΈ°ν™”ν•  λ•Œ μ‚¬μš©.
(일반적으둜 Application.launch() 이전에 JavaFX κΈ°λŠ₯을 μ‚¬μš©ν•˜λ €λŠ” 경우)
β€’
μ˜ˆμ‹œ:
Platform.startup(() -> { System.out.println("JavaFX λŸ°νƒ€μž„ μ΄ˆκΈ°ν™” μ™„λ£Œ"); });
Java
볡사

4. isFxApplicationThread()

β€’
μ„€λͺ…:
ν˜„μž¬ μ½”λ“œκ°€ JavaFX Application Threadμ—μ„œ μ‹€ν–‰ 쀑인지 ν™•μΈν•œλ‹€.
β€’
μ˜ˆμ‹œ:
if (Platform.isFxApplicationThread()) { System.out.println("UI μŠ€λ ˆλ“œμž…λ‹ˆλ‹€!"); } else { System.out.println("λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œμž…λ‹ˆλ‹€!"); }
Java
볡사

5. setImplicitExit(boolean implicitExit)

β€’
μ„€λͺ…:
λͺ¨λ“  Stageκ°€ λ‹«ν˜”μ„ λ•Œ μžλ™μœΌλ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ’…λ£Œν• μ§€ μ—¬λΆ€λ₯Ό μ„€μ •ν•œλ‹€.
β—¦
true (κΈ°λ³Έκ°’): λͺ¨λ“  창이 λ‹«νžˆλ©΄ μ’…λ£Œ
β—¦
false: 창이 λ‹«ν˜€λ„ λ°±κ·ΈλΌμš΄λ“œ μœ μ§€
β€’
μ˜ˆμ‹œ:
Platform.setImplicitExit(false);
Java
볡사

μš”μ•½ λΉ„κ΅ν‘œ

λ©”μ†Œλ“œ
μ£Όμš” κΈ°λŠ₯
μ‚¬μš© μ‹œμ 
runLater()
UI μŠ€λ ˆλ“œμ—μ„œ λ‚˜μ€‘μ— μ‹€ν–‰
UI μ΄ˆκΈ°ν™” ν›„, λ°±κ·ΈλΌμš΄λ“œ β†’ UI
exit()
μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ’…λ£Œ
ν”„λ‘œκ·Έλž¨ μ’…λ£Œ λ²„νŠΌ λ“±
startup()
JavaFX λŸ°νƒ€μž„ μˆ˜λ™ μ΄ˆκΈ°ν™”
λΉ„ν‘œμ€€ ν™˜κ²½, ν…ŒμŠ€νŠΈ ν™˜κ²½
isFxApplicationThread()
ν˜„μž¬ μŠ€λ ˆλ“œ 확인
디버깅 / μ•ˆμ „μ„± 확인
setImplicitExit()
μžλ™ μ’…λ£Œ μ—¬λΆ€ μ„€μ •
트레이 μ•±, 닀쀑 μ°½ μ•± λ“±

싀무 팁

β€’
initialize() μ•ˆμ—μ„œ Platform.runLater() μ‚¬μš©ν•˜λ©΄ UI μ€€λΉ„ ν›„ μ‹€ν–‰ κ°€λŠ₯
β€’
κΈ΄ μ—°μ‚°(파일 읽기, DB 쿼리)은 Taskλ‚˜ Serviceμ—μ„œ μ²˜λ¦¬ν•˜κ³ ,
κ²°κ³Όλ₯Ό Platform.runLater()둜 UI에 λ°˜μ˜ν•œλ‹€.
β€’
Platform.exit()λŠ” System.exit(0)보닀 μ•ˆμ „ν•˜κ²Œ μ’…λ£Œλ¨ (μžμ› ν•΄μ œ 포함)

예제 μ½”λ“œ

Platform.runLater(() -> { System.out.println("UI μŠ€λ ˆλ“œμ—μ„œ μ•ˆμ „ν•˜κ²Œ μ‹€ν–‰!"); }); if (!Platform.isFxApplicationThread()) { Platform.runLater(() -> myLabel.setText("UI λ³€κ²½")); } Platform.setImplicitExit(false); // μ°½ λ‹«ν˜€λ„ μ•± μœ μ§€
Java
볡사
μš”μ•½
Platform ν΄λž˜μŠ€λŠ” JavaFX μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ β€œμƒλͺ…μ£ΌκΈ° μ œμ–΄μžβ€μ΄μž
β€œUI μŠ€λ ˆλ“œ λ³΄μ•ˆ κ΄€λ¦¬μžβ€ 역할을 ν•œλ‹€.
특히 runLater()λŠ” μ‹€λ¬΄μ—μ„œ κ°€μž₯ 많이 μ“°μ΄λŠ” λ©”μ„œλ“œλ‘œ,
λͺ¨λ“  UI μ—…λ°μ΄νŠΈλ₯Ό μ•ˆμ „ν•˜κ²Œ μ‹€ν–‰ν•  수 있게 ν•΄μ€€λ‹€.