ব্যবহার করুন Platform.runLater(...)
দ্রুত এবং সহজ অপারেশন এবং Task
জটিল এবং বড় অপারেশনের জন্য।
উদাহরণ: কেন আমরা Platform.runLater(...)
দীর্ঘ গণনার জন্য ব্যবহার করতে পারি না (নীচের রেফারেন্স থেকে নেওয়া)।
সমস্যা: পটভূমি থ্রেড যা কেবল 0 থেকে 1 মিলিয়ন পর্যন্ত গণনা করা হয় এবং ইউআইতে অগ্রগতি বার আপডেট করে।
কোড ব্যবহার করে Platform.runLater(...)
:
final ProgressBar bar = new ProgressBar();
new Thread(new Runnable() {
@Override public void run() {
for (int i = 1; i <= 1000000; i++) {
final int counter = i;
Platform.runLater(new Runnable() {
@Override public void run() {
bar.setProgress(counter / 1000000.0);
}
});
}
}).start();
এটি কোডের একটি ঘৃণ্য কান্ড, প্রকৃতির বিরুদ্ধে অপরাধ (এবং সাধারণভাবে প্রোগ্রামিং)। প্রথমে, আপনি রান্নেবলের এই ডাবল নেস্টিংয়ের দিকে তাকিয়ে মস্তিষ্কের কোষগুলি হারাবেন। দ্বিতীয়ত, এটি সামান্য রান্নেবলের সাথে ইভেন্টের সারি दलदल করতে চলেছে - বাস্তবে তাদের কয়েক মিলিয়ন million স্পষ্টতই, ব্যাকগ্রাউন্ড কর্মীদের লেখাটি আরও সহজ করে তুলতে আমাদের কিছু এপিআই দরকার যা পরে ইউআইয়ের সাথে যোগাযোগ করে।
টাস্ক ব্যবহার করে কোড:
Task task = new Task<Void>() {
@Override public Void call() {
static final int max = 1000000;
for (int i = 1; i <= max; i++) {
updateProgress(i, max);
}
return null;
}
};
ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();
এটি পূর্ববর্তী কোডটিতে প্রদর্শিত কোনও ত্রুটি থেকে ভোগাচ্ছে
তথ্যসূত্র:
জাভাএফএক্স ২.০ এ কর্মী থ্রেডিং