# रनटाइम त्रुटियाँ

> निष्पादन के दौरान अपवाद और विफलताएँ — MainWindow, FrameBuffer, बैकग्राउंड थ्रेड, कंस्ट्रक्टर में UI।

Source: https://crossfly.dev/hi/docs/troubleshooting/runtime — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# रनटाइम त्रुटियाँ

प्रारूप: **लक्षण → कारण → सुधार**।

## `MainWindow` लोड नहीं होता (reflection त्रुटि / "class not found")
**कारण:** रूट क्लास `Window` को extend नहीं करती **या** उसमें बिना-आर्ग्स वाला public कंस्ट्रक्टर नहीं है।
**सुधार:**
```java
public class MainWindow extends Window {
   public MainWindow() { }   // बिना-args कंस्ट्रक्टर (reflection के लिए अनिवार्य)
   @Override public void onShow() throws Exception { super.onShow(); /* … */ }
}
```
([प्रोजेक्ट की संरचना](/docs/get-started/project-structure))

## "FrameBuffer not disposed! Must call Image.apply after Image.getGraphics!"
**कारण:** आपने किसी `Image` पर **off-screen** ड्रॉ किया और उसे कमिट नहीं किया।
**सुधार:** `Image.getPaint()` से ड्रॉ करें और `paint.finish()` (या `image.applyChanges()`) से अंतिम रूप दें,
सब कुछ `Main.runOnPaintThreadAndWait(...)` के भीतर:
```java
Main.runOnPaintThreadAndWait(() -> {
   Paint p = img.getPaint();
   // … p में ड्रॉ करना …
   p.finish();               // पुष्टि करता है (img.applyChanges() के समतुल्य)
});
```
> ⚠️ विसंगति: **त्रुटि संदेश** `getGraphics()`/`apply()` (पुराने नाम) का उल्लेख करता है; वास्तविक
> मेथड **`getPaint()`** और **`finish()`/`applyChanges()`** हैं। (अध्याय 18)

## बैकग्राउंड थ्रेड में बदला गया कंपोनेंट UI को क्रैश/भ्रष्ट कर देता है
**कारण:** सभी UI हेरफेर **paint thread** पर होते हैं।
**सुधार:** `Component.onUI(r)` / `Main.runOnPaintThread(r)` से वापस आएँ।
```java
new Thread(() -> { var v = calc(); Component.onUI(() -> label.setText(v)); }).start();
```
([paint thread](/docs/concepts/the-paint-thread))

## कंस्ट्रक्टर में बनाया गया UI खाली दिखता है / गलत bounds के साथ
**कारण:** कंस्ट्रक्टर में स्क्रीन/bounds अभी तैयार नहीं होते।
**सुधार:** `super.onShow()` के साथ `onShow()` में बनाएँ। (अध्याय 7)

## `onAction` में अपवाद ऐप को क्रैश किए बिना "गायब" हो जाता है
**कारण:** हैंडलर `Debug.handle` द्वारा पकड़े जाते हैं और **निगल** लिए जाते हैं — वे ऊपर नहीं उठते।
**सुधार:** प्रसार पर भरोसा न करें; लॉग करें (`Debug.log`/`Debug.handle`) और `DebugConsole.txt` जाँचें।
([त्रुटियाँ और logging](/docs/best-practices/tratamento-de-erros-e-logging))

## यह भी देखें
- [रेंडरिंग समस्याएँ](/docs/troubleshooting/render) · [Build और Gradle](/docs/troubleshooting/build-gradle)
