İki ekranlı sistemimde DYS'de bir tarafta dava dosyasını incelerken diğer ekranda UDF Editör'de dilekçe yazmak istiyorum fakat DYS popup pencereleri sürekli arka planda kalıyor, nasıl çözülür?
2 Cevap
Merhaba, çift monitörlü sistemlerde Doküman Yönetim Sistemi (DYS) ve UDF Doküman Editörü'nü aynı anda kullanırken yaşanan bu pencere kilitlenmesi, adliye yazı işleri müdürlüklerinde ve avukat ofislerinde en sık teknik destek talebi açılan kronik problemlerden biridir. Kullanıcılar sistemin tamamen çöktüğünü veya donduğunu sanarak sıklıkla Görev Yöneticisi'nden Java işlemini zorla sonlandırmakta (kill process) ve kaydedilmemiş evraklarını kaybetmektedir. Oysa problem bir çökme değil, Java Swing / AWT modalite mimarisi ile Windows Masaüstü Pencere Yöneticisi (DWM) arasındaki Z-Order (pencere derinlik sırası) uyuşmazlığıdır.
Sorunun Kök Nedeni: Modalite ve Z-Index Kilitlenmesi (Deadlock)
- Java Swing Modal Pencere Bağımlılığı: DYS istemcisi (
dys.jnlp) saf bir Java masaüstü uygulamasıdır. DYS içinde bir evrak onaylandığında, e-imza sihirbazı başlatıldığında veya bir onay kutusu geldiğinde sistem birJDialognesnesi üretir. Bu diyaloglar güvenlik gereği APPLICATION_MODAL (uygulama düzeyinde zorunlu modal) olarak işaretlenir. Modal pencere kapatılmadan veya onaylanmadan ana uygulama penceresine tıklanması Java çalışma zamanı tarafından işletim sistemi seviyesinde kasten engellenir. - Çoklu Monitörde Ekran Koordinat Kaybı ve Z-Order Sapması: Windows üzerinde iki farklı ekran çözünürlüğü veya farklı DPI ölçeklendirmesi (örneğin ana ekran %100, ikincil ekran %125) kullanıldığında, Java AWT grafik alt sistemi sanal ekran koordinatlarını hesaplarken hedef popup'ı ana DYS penceresinin koordinat merkezine göre çizer. Ancak siz diğer ekrandaki UDF Editör'e odaklandığınızda (focus gain), Windows pencere yöneticisi UDF Editör'ü en üst Z-Order katmanına taşır. DYS'nin modal popup'ı ise DYS'nin arka planına ya da UDF Editör'ün tam altına düşer. Modal pencere arkada kaldığı ve ana DYS ekranına tıklamayı bloke ettiği için sistem kullanıcıya 'donmuş' hissi verir.
Bu Problemi Kalıcı Olarak Gidermenin 4 Adımlı Çözüm Protokolü:
1. Java Control Panel Grafik Motoru Parametrelerini Ayarlayın
Java Swing'in çift ekranlı Windows grafik bağlamında doğru Z-Order hiyerarşisi kurabilmesi için DirectDraw donanım hızlandırmasındaki çakışmayı devre dışı bırakmak gerekir:
- Windows Başlat menüsünden Configure Java (Java'yı Yapılandır) uygulamasını açın.
- Java sekmesine gelin ve View (Görüntüle) butonuna tıklayın.
- Kullanılan Java sürümünün karşısındaki Runtime Parameters satırına çift tıklayarak şu parametreleri ekleyin:
-Dsun.java2d.d3d=false -Dsun.java2d.noddraw=true -Dawt.useSystemAAFontSettings=on -Dsun.awt.keepWorkingSetOnMinimize=true - Bu parametreler Java'nın çift monitör arasındaki donanım çizim yüzeyi karmaşasını önler ve pencerelerin arka plana hapsolmasını engeller. Apply ve OK diyerek kaydedin.
2. Ekran DPI Ölçeklendirmesini Eşitleyin (Kritik Adım)
Windows Masaüstünde boş bir yere sağ tıklayıp Görüntü Ayarları (Display Settings) bölümüne gidin:
- Her iki monitörünüzün de Ölçek (Scale) değerini mutlaka aynı yapın (Her iki ekran da %100 veya her ikisi de %125 olmalıdır). Farklı DPI oranları Java Swing koordinat matrisini bozarak açılan diyalogların ekran dışına taşmasına veya pencerelerin arkasına gizlenmesine sebep olur.
- DYS uygulamasını her zaman Windows tarafından 'Birincil Ekran' (Primary Display) olarak tanımlanan monitörde çalıştırın; UDF Editör bağımsız bir uygulama olduğu için onu rahatlıkla ikincil ekrana taşıyabilirsiniz.
3. Arkada Kalan Pencereyi Kurtarma Klavye Kısayolu (Altın Kural)
DYS donmuş gibi kaldığında Görev Yöneticisi'ne gitmeden önce şu klavye adımlarını uygulayın:
- Klavyeden Alt + Tab tuş kombinasyonuna basılı tutarak açık pencereler arasında DYS'nin küçük onay kutusunu (genellikle 'Onay', 'Evrak İmzalama' veya 'DYS Dialog' başlıklıdır) seçin.
- Eğer pencere yine görünmüyorsa: DYS ana penceresi seçiliyken klavyeden Alt + Boşluk (Space) tuşlarına basın, açılan küçük menüden Taşı (Move) seçeneğine tıklayın veya klavyeden T harfine basın. Ardından klavyenizin yön ok tuşlarına bir kez basıp farenizi hareket ettirin; arkada kalan diyalog penceresi anında farenizin ucuna yapışarak en öne gelecektir.
- Ayrıca Windows 10/11'de pencereleri ekranlar arasında kayıpsız taşımak için Windows + Shift + Sol / Sağ Ok kısayolunu kullanabilirsiniz.
Bu grafik parametreleri ve ekran eşitlemesi yapıldığında, DYS pencereleri hiçbir zaman UDF Editör'ün arkasında kaybolmayacak, tüm onay ve imza sihirbazları daima en ön planda kusursuz bir şekilde görüntülenecektir.
Pratik çalışma düzeni tavsiyesi: DYS açılırken arka planda birden çok JNLP çocuk penceresi çalıştırır. Windows Görev Çubuğu ayarlarından 'Görev çubuğu düğmelerini birleştir' seçeneğini 'Her zaman' yerine 'Hiçbir zaman' veya 'Görev çubuğu dolduğunda' olarak değiştirirseniz; DYS'nin ürettiği her bir alt onay ve imza popup'ı görev çubuğunda bağımsız bir sekme olarak görünür. Böylece arkada kalan pencereyi aramak zorunda kalmadan görev çubuğundaki ilgili kutucuğa tıklayarak doğrudan öne getirebilirsiniz.