2012-04-03 16 views
13

Gerçekler:Duyarlı MATLAB GUI() MATLAB hakkında doğrudan

  1. MATLAB UI Java Swing olduğunu.
  2. MATLAB, Java ile mükemmel bir birlikte çalışabilirliğe sahiptir, Java nesnelerini başlatmak ve MATLAB kodundan doğrudan yöntemlerini çağırmak mümkündür, hatta MATLAB tanımlı dinleyicileri Java'ya aktarmak bile mümkündür!

Benim sorun:

MATLAB yüzden, Salıncak EDT kuyruğunu temizler işlevini drawnow çağrı da here ve here görmek zorunda MATLAB UI duyarlı hale getirmek için, arka plan konuları sunmuyor. Bu bilinen bir gerçek, şu ana kadar çok iyi.

Ancak şimdi hesaplamayı yapan bir MATLAB p dosyası (şifrelenmiş) kodu olan bir müşterim var. Bu nedenle, drawnow kodunu koyabilmek için hiçbir erişimim yok.

Başarısız girişimi:

Ben drawnow çağıran işi yapmak için bir zamanlayıcı kadar iplik çalıştı ama işe görünmüyor - kendisi geri aramalar yangın emsal drawnow ihtiyacı zamanlayıcısı.

DÜZENLEME: Sonunda, başka bir iş parçacığı üzerinde çalışan .NET/WPF ile GUI'yi uyguladım, bu nedenle her zaman yanıt vermeye devam ediyor ve orijinal MATLAB'den daha iyi görünüyor.

cevap

2

Sadece bir fikir. Java için Matlab oluşturucuyu kullanarak p-dosyadan bir kavanoz dosyası oluşturabilirsiniz. Java'nın içinden hesaplama işlemini şimdi ayrı bir iş parçacığında yapabilirsiniz.

+0

Bu çok çirkin bir çözümdür ancak işe yarayabilir. ** Bunu değerlendiremeden önce test etmeliyim **. – Mikhail

7

Bunun düzgün bir şekilde yapılıp yapılamayacağını bilmiyorum. Bir mex dosyasının ortasında çizilmiş bir etkiyi elde etmenin bir yolunu bulamadım ve bu durumun benzer olduğunu tahmin ediyorum. Ama yine de inanılmaz derecede dağınık bir şekilde hack: D. çağırıyor) (

profile on; 
pfile(); 
profile viewer; 

ve pfile'ı yedekleyin hangi işlevleri hakkında bir fikir edinmek: Bir pfile'ı yedekleyin varsa, çalıştırabilirsiniz. Eğer kod herhangi bir yerleşik fonksiyonu (örn. Disp) veya kaynak koduna erişiminiz olan herhangi bir işlevi çağırıyorsa, bu dosyanın kendi versiyonunu p-dosyasıyla çağrılacak olan yol üzerinde daha fazla oluşturabilirsiniz. Örneğin

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

Bu, düzenli aralıklarla dispme çağrılmadıkça çok fazla kullanılmayacak olsa da, her 5 saniyede bir kere drawow çağırır. Geçersiz kılmak için bir yerleşik bulamıyorsanız, başka bir işlev kullanabilir ve yalnızca üst kısımdaki çizik parçasını aşağıdaki gibi ekleyebilirsiniz:

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

Çok akıllı! Görünüşe göre önceliği (a) 'disp' (b) gibi kullanıcı tanımlı işlev gibi '' primes '' fonksiyonunu geçersiz kılan (p) kendini p kodlu olan şey nedir? – Mikhail

+1

Oldukça dağınık. Her zaman bir işleve (geçersiz kılsa bile) atıfta bulunmanın bir yolu olduğunu düşünmüştüm ama şimdi bulamıyorum. Anladığım kadarıyla, 'yol' hangi işlevlerin göründüğünü tam olarak tanımlar. Yerleşik işlevler haricinde, diğer yerleşik işlevler erişilebilir değildir, burada yerleşik (...) 'onlara erişmenizi sağlar.P kodlu-ness'in görünürlüğü/önceliğini etkilediğini sanmıyorum: eğer aynı isimde bir fonksiyon varsa, yolun daha ileride olması önceliğe sahip olacaktır. – Richante