W przypadku komponentu J2EE ponownie używam kodu opracowanego dla aplikacji do przechwytywania java. JOptionPane.showMessageDialog() jest niestety powszechnie używany. Najczęściej na szczęście w sekcjach kodu, które nie są ponownie wykorzystywane przez aplikację J2EE, ale w niektórych przypadkach niższe poziomy kodu mają instancje JOptionPane.showMessageDialog(). Oczywiście powoduje to pojawianie się okien dialogowych na serwerze, czego właśnie chcę uniknąć.Najlepszy sposób na wykrywanie, czy kod działa na serwerze aplikacji java
Jako pierwszy krok chciałbym się upewnić, że na serwerze nie pojawią się żadne okna dialogowe.
Ktoś zasugerował, zerkając w jakiejś kolejce zdarzeń lub farby (nie pamiętam który z nich): To byłoby:
// old code: JOptionPane.showMessageDialog(msg);
if (someEventQueue.size() == 0) // <== consider this pseudo-code
Log.log(msg); // I am running on a server. Tell the log.
else
JOptionPane.showMessageDialog(msg); // I have a user made of meat. Tell him!
Nigdy naprawdę że dostał pracę. Co byś zrobił?
Chciałbym zrobić to w prawidłowy sposób. Mieć interfejs z metodą 'logToUser' i przekazać jej instancję w swoim kodzie lub włożyć ją do jakiegoś statycznego pola (jeśli drugie jest niewykonalne). Gdzie się logujesz, po prostu wywołaj tę metodę. Użytkownicy kodu na serwerze będą musieli zapewnić implementację, a aplikacja Swing zapewni inną (a Android lub SWT lub inna aplikacja będzie musiała dostarczyć kolejną). Pamiętaj, aby sprawdzić wcześnie, jeśli implementacja jest ustawiona i wyrzucić wyjątek, jeśli nie ... – mihi