2012-04-03 8 views
13

MATLAB के बारे में तथ्य:उत्तरदायी MATLAB जीयूआई() सीधे

  1. MATLAB यूआई जावा स्विंग है।
  2. MATLAB जावा के साथ उत्कृष्ट इंटरऑपरेबिलिटी है, जावा ऑब्जेक्ट्स को प्रारंभ करना संभव है और MATLAB कोड से सीधे अपने तरीकों को कॉल करना संभव है, MATLAB परिभाषित श्रोताओं को जावा में पास करना भी संभव है!

मेरी समस्या:

MATLAB पृष्ठभूमि धागे की पेशकश नहीं करता है, तो MATLAB यूआई उत्तरदायी हम, समारोह drawnow जो स्विंग EDT कतार flushes फोन भी देख here और here करने के लिए है बनाने के लिए। यह एक ज्ञात तथ्य है, अब तक इतना अच्छा है।

लेकिन अब मेरे पास एक ग्राहक है जिसका गणना गणना करता है, MATLAB पी-फ़ाइल (एन्क्रिप्टेड) ​​है इसलिए मुझे drawnow डालने के लिए कोड तक पहुंच नहीं है।

असफल प्रयास:

मैं एक टाइमर अप कताई drawnow बुलाने की काम करने की कोशिश की, लेकिन यह काम करने के लिए प्रतीत नहीं होता है - टाइमर ही अपने कॉलबैक आग एक मिसाल drawnow की जरूरत है।

संपादित करें: अंत में मैंने .NET/WPF के साथ जीयूआई को अन्य थ्रेड पर चलाना शुरू किया, इसलिए यह हमेशा उत्तरदायी रहता है और मूल MATLAB के बाद बेहतर दिखता है।

उत्तर

2

बस एक विचार। आप जावा के लिए मैटलैब बिल्डर का उपयोग कर पी-फाइल से एक जार फ़ाइल बना सकते हैं। जावा के भीतर से आप अब एक अलग थ्रेड में गणना कर सकते हैं।

+0

यह एक बहुत ही बदसूरत समाधान है, लेकिन यह काम कर सकता था। ** इसे रेट करने से पहले मुझे इसका परीक्षण करना होगा **। – Mikhail

7

मुझे नहीं पता कि यह ठीक से किया जा सकता है या नहीं। मुझे कभी भी एक मैक्स फ़ाइल के बीच में खींचा जाने का असर नहीं मिला है, और मुझे लगता है कि यह स्थिति समान है। लेकिन यहां एक अविश्वसनीय रूप से गन्दा हैक है: डी। यदि आप एक pfile है, तो आप चला सकते हैं:

profile on; 
pfile(); 
profile viewer; 

और क्या pfile काम करता है की एक विचार मिलता है() बुला रहा है। यदि कोड किसी अंतर्निहित फ़ंक्शंस (जैसे disp) या किसी भी फ़ंक्शन को कॉल कर रहा है जिसका स्रोत-कोड आपके पास है, तो आप उस फ़ाइल का अपना संस्करण उस पथ को आगे बढ़ा सकते हैं, जिसे पी-फाइल द्वारा बुलाया जाएगा, जैसे

function disp(X) 
    if (toc > 5) 
    drawnow; 
    tic; 
    end 
    builtin('disp', X); 

यह हर 5 सेकंड में सबसे अधिक बार खींचा जाएगा, हालांकि यह तब तक अधिक उपयोग नहीं करेगा जब तक कि नियमित रूप से डिस्प को नहीं कहा जाता। आप ओवरराइड करने के लिए अंतर्निहित नहीं मिल रहा है, तो आप किसी भी अन्य समारोह इस्तेमाल कर सकते हैं और सिर्फ शीर्ष पर drawnow हिस्सा डालें, जैसे:

function primes(N) 
    if (toc > 5) 
    drawnow; 
    tic; 
    end 
    The rest of the original primes.m here. 
+0

बहुत चालाक! दृश्यता/प्राथमिकता के बारे में क्या है जब मैं (ए) बिल्ट-इन फ़ंक्शन जैसे 'disp' (बी) उपयोगकर्ता परिभाषित फ़ंक्शन 'primes'' को ओवरराइड करता हूं, जो संभवतः पी-कोडित होता है? – Mikhail

+1

यह काफी गन्दा है। मैंने सोचा था कि विशेष रूप से एक फ़ंक्शन को संदर्भित करने का एक तरीका था (भले ही यह ओवरराइड हो), लेकिन मुझे अब यह नहीं मिल रहा है। जैसा कि मैं इसे समझता हूं, 'पथ' परिभाषित करता है कि कौन से फ़ंक्शन दिखाई दे रहे हैं। अंतर्निर्मित कार्यों को छोड़कर, कोई अन्य ओवर्रिडन फ़ंक्शंस सुलभ प्रतीत नहीं होता है, जहां 'बिल्टिन (...)' आपको उन तक पहुंचने देता है।मुझे नहीं लगता कि पी-कोडेड-नेस दृश्यता/प्राथमिकता को प्रभावित करता है: यदि एक ही नाम के साथ कोई कार्य पथ आगे बढ़ता है तो इसकी प्राथमिकता होगी। – Richante

संबंधित मुद्दे