को साफ़ करने के लिए syncExec और asyncExec को लपेटना मेरे पास टूलकिट के रूप में एसडब्ल्यूटी का उपयोग कर जावा एप्लिकेशन है, और मैं एक जीयूआई तत्व को अपडेट करने के लिए सभी बदसूरत बॉयलर प्लेट कोड से थक गया हूं।जावा एसडब्ल्यूटी: कोड
बस एक विकलांग बटन सेट करने के लिए सक्षम होने के लिए मैं कुछ इस तरह के माध्यम से जाना है:
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
buttonOk.setEnabled(true);
}
});
मैं के रूप में मैं संभवतः कर सकते हैं फ्लैट मेरे स्रोत कोड रखने पसंद करते हैं, लेकिन मैं एक whopping 3 इंडेंटेशन स्तर की जरूरत है बस कुछ आसान करने के लिए।
क्या कोई तरीका है जिससे मैं इसे लपेट सकता हूं? मैं की तरह एक वर्ग चाहते हैं:
public class UIUpdater {
public static void updateUI(Shell shell, *function_ptr*) {
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
//Execute function_ptr
}
});
}
}
और इसलिए की तरह इस्तेमाल किया जा सकता है:
UIUpdater.updateUI(shell, buttonOk.setEnabled(true));
कुछ इस तरह छुपा भयानक गंदगी SWT सोचने के लिए लगता है कि कुछ भी करने के लिए आवश्यक है के लिए बहुत अच्छा होगा।
जैसा कि मैं इसे समझता हूं, जावा फ़ंक्शन पॉइंटर्स नहीं कर सकता है। लेकिन जावा 7 में कुछ क्लोजर कहा जाएगा जो मुझे चाहिए। लेकिन इस बीच में कुछ भी है जो मैं फ़ंक्शन पॉइंटर या कॉलबैक को निष्पादित करने के लिए किसी अन्य फ़ंक्शन को पास करने के लिए कर सकता हूं?
एक के रूप में अलग रूप में, मुझे लगता है कि करने के लिए यह स्विंग में इस आवेदन को फिर से करना प्रयास के लायक हो जाएगा शुरू कर रहा हूँ, और मैं इस बदसूरत बकवास और SWT की गैर पार platformyness के साथ डाल करने के लिए नहीं है।
मुझे आशा है कि आप जानते हैं, कि स्विंग एकल भी पिरोया है। इसलिए आपको किसी अन्य थ्रेड से जीयूआई तत्व अपडेट करने के लिए SWT में ऐसा करना होगा। केवल अंतर यह है कि जब आप गलत थ्रेड से स्विटिंग विधियों को कॉल करते हैं तो स्विंग अपवाद नहीं फेंकता है। लेकिन जब आप यह गलत करते हैं तो आप अपने ऐप में खराब बुनाई कीड़े देखेंगे। –