μ€λ λ
νλ‘κ·Έλ¨ λ΄μμ λμμ μ€νλλ κ°μ₯ μμ μ€ν λ¨μμ
λλ€.
νλμ νλ‘μΈμ€ μμμ μ¬λ¬ μ€λ λκ° λ³λ ¬λ‘ μμ
μ μνν μ μκ² ν΄μ€λλ€.
graph TD; A["νλ‘μΈμ€"] --> B["μ€λ λ 1"]; A --> C["μ€λ λ 2"]; A --> D["μ€λ λ 3"]; B --> E["λ 립μ μΈ μ€ν"]; C --> F["곡μ μμ μ¬μ©"]; D --> G["λ³λ ¬ μ²λ¦¬"]; E --> H["μ€ν"]; F --> I["ν λ©λͺ¨λ¦¬"]; G --> J["CPU μκ°"]; style A fill:#f9f,stroke:#333,stroke-width:2px; style B fill:#bbf,stroke:#333,stroke-width:2px; style C fill:#bbf,stroke:#333,stroke-width:2px; style D fill:#bbf,stroke:#333,stroke-width:2px;
Mermaid
볡μ¬
μ λ€μ΄μ΄κ·Έλ¨μ νλμ νλ‘μΈμ€ μμμ μ¬λ¬ μ€λ λκ° λμνλ λ°©μμ 보μ¬μ€λλ€. κ° μ€λ λλ λ
립μ μΌλ‘ μ€νλλ©΄μ λμμ νλ‘μΈμ€μ μμμ 곡μ ν μ μμ΅λλ€.
JavaFX μμ μ€λ λ μ¬μ©νκΈ°
JavaFX UI μ€λ λ
JavaFX μ ν리μΌμ΄μ
μμ UI κ΄λ ¨ μμ
μ μ£Ό μ€λ λ(JavaFX Application Thread)μμ μ€νλμ΄μΌ ν©λλ€.
Platform.runLater(() -> {
// UI μ
λ°μ΄νΈ μ½λ
label.setText("λ°μ΄ν° μμ μλ£");
});
Java
볡μ¬
μμΌ ν΅μ μ€λ λ
μμΌ ν΅μ μ λ³λμ μ€λ λμμ μ²λ¦¬νμ¬ UIκ° λΈλ‘νΉλμ§ μλλ‘ ν©λλ€.
new Thread(() -> {
try (Socket socket = new Socket("localhost", 8080)) {
// μμΌ ν΅μ μ½λ
InputStream input = socket.getInputStream();
// λ°μ΄ν° μμ ν UI μ
λ°μ΄νΈ
Platform.runLater(() -> updateUI(data));
} catch (IOException e) {
e.printStackTrace();
}
}).start();
Java
볡μ¬
μ€λ λ κ° ν΅μ
β’
μμΌ μ€λ λμμ λ°μ΄ν°λ₯Ό μμ νλ©΄ Platform.runLater()λ₯Ό μ¬μ©νμ¬ UI μ€λ λμ μ
λ°μ΄νΈλ₯Ό μμ²
β’
λ°μ΄ν°λ μ€λ λ μμ ν 컬λ μ
(μ: ConcurrentHashMap)μ μ¬μ©νμ¬ κ³΅μ
β’
μ€λ λ κ° λκΈ°νλ₯Ό μν΄ synchronized λΈλ‘μ΄λ Lock μ¬μ©
μ΄λ¬ν ꡬ쑰λ₯Ό ν΅ν΄ λ€νΈμν¬ μμ
μ΄ UIμ λ°μμ±μ μν₯μ μ£Όμ§ μμΌλ©΄μ ν¨μ¨μ μΈ λ°μ΄ν° μ²λ¦¬κ° κ°λ₯ν©λλ€.