জাভাতে, সুইং উপাদানগুলি স্ক্রিনে প্রদর্শিত হওয়ার পরে, সেগুলিকে ইভেন্ট হ্যান্ডলিং থ্রেড নামে শুধুমাত্র একটি থ্রেড দ্বারা পরিচালিত করা যেতে পারে। . আমরা আমাদের কোডটি একটি পৃথক ব্লকে লিখতে পারি এবং এই ব্লকটিকে ইভেন্ট -এ উল্লেখ করতে পারি হ্যান্ডলিং থ্রেড . সুইং ইউটিলিটিস ক্লাসের দুটি গুরুত্বপূর্ণ স্ট্যাটিক পদ্ধতি রয়েছে, invokeAndWait() এবং invokeLater() ইভেন্টে কোডের ব্লকের রেফারেন্স রাখতে ব্যবহার করতে সারি .
সিনট্যাক্স
public static void invokeAndWait(Runnable doRun) throws InterruptedException, InvocationTargetException public static void invokeLater(Runnable doRun)
পরামিটার doRun ৷ Runnable এর একটি উদাহরণের উল্লেখ ইন্টারফেস. এই ক্ষেত্রে, চালানযোগ্য ইন্টারফেসটি থ্রেডের কনস্ট্রাক্টরের কাছে পাঠানো হবে না। চালাতে যোগ্য ইভেন্ট থ্রেডের এন্ট্রি পয়েন্ট সনাক্ত করার জন্য ইন্টারফেসটি সহজভাবে ব্যবহার করা হচ্ছে। ঠিক যেমন একটি সদ্য তৈরি থ্রেড রান() আহ্বান করবে , ইভেন্ট থ্রেড রান() আহ্বান করবে পদ্ধতি যখন এটি সারিতে মুলতুবি থাকা অন্যান্য সমস্ত ইভেন্ট প্রক্রিয়া করে। একটি বিঘ্নিত ব্যতিক্রম থ্রেড যদি invokeAndWait() বলে থ্রেড নিক্ষেপ করা হয় অথবা invokeLater() i টার্গেট দ্বারা উল্লেখিত কোডের ব্লক সম্পূর্ণ হওয়ার আগে s বাধাপ্রাপ্ত হয়। একটি InvocationTargetException run() -এর ভিতরে কোড দ্বারা একটি ধরা না পড়া ব্যতিক্রম নিক্ষেপ করা হলে নিক্ষেপ করা হয় পদ্ধতি।
উদাহরণ
import javax.swing.*; import java.lang.reflect.InvocationTargetException; public class SwingUtilitiesTest { public static void main(String[] args) { final JButton button = new JButton("Not Changed"); JPanel panel = new JPanel(); panel.add(button); JFrame f = new JFrame("InvokeAndWaitMain"); f.setContentPane(panel); f.setSize(300, 100); f.setVisible(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); System.out.println(Thread.currentThread().getName()+" is going into sleep for 3 seconds"); try { Thread.sleep(3000); } catch(Exception e){ } //Preparing code for label change Runnable r = new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()+"is going into sleep for 10 seconds"); try { Thread.sleep(10000); } catch(Exception e){ } button.setText("Button Text Changed by "+ Thread.currentThread().getName()); System.out.println("Button changes ended"); } }; System.out.println("Component changes put on the event thread by main thread"); try { SwingUtilities.invokeAndWait(r); } catch (InvocationTargetException | InterruptedException e) { e.printStackTrace(); } System.out.println("Main thread reached end"); } }
আউটপুট