بهتره به همون صورت که گفتم مینوشتید. اولا نیازی به استفاده از arraylabels نیست. اونم در سازنده کلاس MyHandler. شما در arraylabels که در سازنده MyHandler صدا میزنید و labels در arraylabels تعریف میشه در حالی که قبلش به سازنده MyHandler پاس دادید.
اون components خودش آرایه ای از label ها هست پس نیازی به چنین تابعی نیست. موقع تعریف در کلاس Main2 بیایید و یک آرایه از کامپوننت ها بگیرید یا همونجا arraylabels رو صدا بزنید یکبار (کاری که شما کردید چندین بار الکی labels ساخته میشه).

برای همین هم کامپوننت اول چون موقع صدا زدن سازنده MyHandler آرگومان که همون labels هست و در سازنده به اسم components هست مقدار null داره و این مقدار به component2 داده میشه و الی آخر. ولی چون در سازنده اول labels در arraylabels شی اش ساخته میشه در صدا زدن سازنده MyHandler های بعدی این مقدار null نیست.

برای کدهای آیندتون هم بهتره دیباگ کردن رو یاد بگیرید یا لااقل به اشیائی که مشکوک هستید یا نقاطی که خطا میده با System.out.println آبجکت ها رو پرینت کنید تا متوجه بشید کدوم آبجکت null هست و مشکل رو بتونید پیدا کنید.