Platform.runLater() মেথডটি JavaFX তে ব্যবহৃত হয় যখন আপনি UI থ্রেডে কাজ করতে চান, কিন্তু আপনি অন্য কোন থ্রেড থেকে UI উপাদানগুলির সাথে ইন্টারঅ্যাকশন করছেন। JavaFX অ্যাপ্লিকেশনগুলো single-threaded থাকে এবং UI-র সমস্ত পরিবর্তন JavaFX Application Thread (UI Thread) এ ঘটতে হয়। তবে, আপনি যদি কোনও ব্যাকগ্রাউন্ড থ্রেড (যেমন, একটি নতুন থ্রেড বা Task ক্লাস) থেকে UI-র কোন উপাদান পরিবর্তন করতে চান, তবে Platform.runLater() ব্যবহার করতে হবে। এটি নিশ্চিত করে যে UI সংশ্লিষ্ট কাজগুলি UI থ্রেডে সঠিকভাবে সম্পাদিত হবে।
Platform.runLater() মেথডের কাজ:
- এটি একটি Runnable অবজেক্ট নেয় এবং সেই কোডটি JavaFX Application Thread এ রান করায়।
- যেহেতু JavaFX অ্যাপ্লিকেশন থ্রেড UI উপাদানগুলির সাথে কাজ করার জন্য একমাত্র থ্রেড, তাই ব্যাকগ্রাউন্ড থ্রেড থেকে UI-এ পরিবর্তন করতে
Platform.runLater()ব্যবহার করা প্রয়োজন।
Platform.runLater() এর সাধারণ ব্যবহার:
1. Basic Example:
এই উদাহরণে, ব্যাকগ্রাউন্ড থ্রেড থেকে UI-তে একটি বার্তা আপডেট করা হচ্ছে।
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class PlatformRunLaterExample extends Application {
@Override
public void start(Stage primaryStage) {
// UI-তে একটি লেবেল তৈরি
Label label = new Label("Initial Text");
// StackPane layout
StackPane root = new StackPane();
root.getChildren().add(label);
// Scene তৈরি এবং সেট করা
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Platform.runLater() Example");
primaryStage.setScene(scene);
primaryStage.show();
// নতুন থ্রেড তৈরি করা
new Thread(() -> {
try {
// কিছু কাজ সম্পন্ন করার জন্য দেরী করা
Thread.sleep(2000);
// UI-তে কিছু পরিবর্তন করার জন্য Platform.runLater() ব্যবহার করা
Platform.runLater(() -> {
label.setText("Text Updated from Background Thread");
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
public static void main(String[] args) {
launch(args);
}
}
এখানে কী হচ্ছে?
- UI Thread এ একটি লেবেল তৈরি করা হয়েছে।
- একটি নতুন থ্রেড তৈরি করা হয়েছে যা
Thread.sleep(2000)দিয়ে 2 সেকেন্ড বিরতি নিচ্ছে। - 2 সেকেন্ড পরে,
Platform.runLater()ব্যবহার করে UI থ্রেডে লেবেলের টেক্সট পরিবর্তন করা হচ্ছে। এতে UI থ্রেডে সঠিকভাবে কাজ হচ্ছে এবং "Text Updated from Background Thread" বার্তা প্রদর্শিত হচ্ছে।
2. Background Task with UI Updates Example:
এখানে একটি ব্যাকগ্রাউন্ড টাস্কের মাধ্যমে ডেটা প্রসেস করা হচ্ছে এবং সেই ডেটার সাথে UI আপডেট করা হচ্ছে।
import javafx.application.Application;
import javafx.application.Platform;
import javafx.concurrent.Task;
import javafx.scene.Scene;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class BackgroundTaskWithUIExample extends Application {
@Override
public void start(Stage primaryStage) {
// প্রগ্রেস বার তৈরি করা
ProgressBar progressBar = new ProgressBar(0);
// StackPane layout
StackPane root = new StackPane();
root.getChildren().add(progressBar);
// Scene তৈরি এবং সেট করা
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Background Task with UI Updates");
primaryStage.setScene(scene);
primaryStage.show();
// ব্যাকগ্রাউন্ড টাস্ক তৈরি করা
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
for (int i = 0; i <= 100; i++) {
// প্রগ্রেস আপডেট করার জন্য Platform.runLater() ব্যবহার করা
final int progress = i;
Platform.runLater(() -> progressBar.setProgress(progress / 100.0));
// কিছু কাজ সম্পন্ন করার জন্য দেরী করা
Thread.sleep(50);
}
return null;
}
};
// টাস্ক চালানো
new Thread(task).start();
}
public static void main(String[] args) {
launch(args);
}
}
এখানে কী হচ্ছে?
- একটি ProgressBar তৈরি করা হয়েছে যা ব্যবহারকারীকে কিছু কাজ চলমান থাকার সময় আপডেট দেখাবে।
- একটি ব্যাকগ্রাউন্ড Task তৈরি করা হয়েছে যা 0 থেকে 100 পর্যন্ত প্রগ্রেস আপডেট করবে।
Platform.runLater()ব্যবহার করে ব্যাকগ্রাউন্ড থ্রেড থেকে UI-তে প্রগ্রেস আপডেট করা হচ্ছে, যাতে UI থ্রেডে সঠিকভাবে এটি দেখানো যায়।
Platform.runLater() এর প্রয়োজনীয়তা
- UI Thread Safety: JavaFX অ্যাপ্লিকেশন থ্রেডে UI উপাদানগুলির সাথে ইন্টারঅ্যাকশন করার জন্য নিশ্চিতভাবে UI Thread এ কাজ করতে হবে। অন্যথায়
IllegalStateExceptionহতে পারে। - Concurrency: ব্যাকগ্রাউন্ড থ্রেডের মাধ্যমে লম্বা সময়ের কাজ সম্পাদন করতে গেলে, UI থ্রেডে কোনো লক বা ফ্রিজিং না ঘটে, সে কারণে UI-কে আপডেট করতে
Platform.runLater()ব্যবহার করা হয়।
Platform.runLater() এর অতিরিক্ত ব্যবহার
- UI Updates: যখন আপনি ব্যাকগ্রাউন্ড থ্রেডে কিছু কাজ করেন, এবং সেই কাজের ফলাফল UI-তে দেখাতে চান, তখন
Platform.runLater()ব্যবহার করা হয়। - Thread Communication: ব্যাকগ্রাউন্ড থ্রেড এবং UI থ্রেডের মধ্যে ডেটা পাঠানোর জন্য এটি ব্যবহৃত হতে পারে।
- Animation Updates: কোনো অ্যানিমেশন বা টাস্কের ফলাফল UI-তে ধীরে ধীরে আপডেট করতে হলে,
Platform.runLater()ব্যবহার করা হয়।
সারাংশ:
Platform.runLater()মেথডটি JavaFX অ্যাপ্লিকেশনে ব্যাকগ্রাউন্ড থ্রেড থেকে UI থ্রেডে ইভেন্ট বা কাজ পাঠানোর জন্য ব্যবহৃত হয়।- এটি JavaFX অ্যাপ্লিকেশন থ্রেডে UI Components এর সাথে সঠিকভাবে কাজ করার জন্য গুরুত্বপূর্ণ।
Read more