<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />In JMP 11 schreibe ich eine Plotanwendung, die es dem Benutzer ermöglicht, die Legenden anzupassen, indem er die Gruppierungsspalte auswählt, die die Zeilenzustände definiert. Dazu ist das Löschen der alten Legende (durch Löschen des übergeordneten Rahmens) und das Hinzufügen einer neuen Legende erforderlich.Ich habe jedoch festgestellt, dass, wenn die automatische Neuberechnung auf den Bivariatitäts- oder Variabilitätsplattformen eingestellt ist (ich habe andere Plattformen nicht getestet), dies dazu führt, dass eine Kopie der alten Legende zusätzlich zur neuen erneut angezeigt wird, wenn die neue Legende erscheint Eine davon wird mit dem Befehl „FrameBox<
Ich habe mir auch überlegt, die Spalte <Betreff: Automatische Neuberechnung(1) führt dazu, dass alte Legenden nach dem Löschen des übergeordneten Rahmens wieder angezeigt werden.
Am Ende habe ich schließlich die Funktion „dt<Betreff: Automatische Neuberechnung(1) führt dazu, dass alte Legenden nach dem Löschen des übergeordneten Rahmens wieder angezeigt werden.
Ich habe also viel damit herumgespielt und konnte dieses Verhalten schließlich sogar mit einem der integrierten Datensätze nachbilden.Der folgende Code verursacht einen Speicherverlust, der zum Absturz von JMP führt.
So reproduzieren Sie den Fehler:
(1) Erstellen Sie eine Plattform in einem Fenster, bei dem die automatische Neuberechnung auf 1 gesetzt ist
(2) Fügen Sie einige Legenden hinzu
(3) Einige Zeilen ausschließen
(4) Fügen Sie eine weitere Legende hinzu. Auch nach dem Löschen einer oder beider Originallegenden friert JMP ein
Der Fehler äußert sich in einer allmählichen Erhöhung der Speichernutzung (~10 MB/s) durch jmp, während es durch einen unendlichen Speicherverlust arbeitet.
Dieser Fehler kann vermieden werden, indem der Ausschlussstatus für alle Zeilen in der Tabelle auf 0 gesetzt wird (d. h Für jede Zeile (Excluded(RowState()) = 0).
Eine weitere Besonderheit, die durch die automatische Neuberechnung aktiviert wird, ist die Tatsache, dass Legenden nicht gelöscht werden, es sei denn, es gibt eine erzwungene Zeitverzögerung, bevor die Legende nach ihrer Erstellung gelöscht wird.Wenn die automatische Neuberechnung auf 0 eingestellt ist, erfolgt das Löschen problemlos.
//Code, der abstürzt
Namen standardmäßig hier( 1 );
Try(CLose(dt,nosave));
dt = Open( "$SAMPLE_DATA/Big Class.jmp",invisible );
dt<
obj = NewWindow("test",biv_container = HListbox(biv = Bivariate( Y( :weight ), X( :height ),Automatic Recalc(1))));
/*
data_filter_container = ScrollBox(Size(200,500),data_filter = dt << Data Filter( Add Filter( columns( :Sex, :Age, :Name, :Height, :Weight ) )));
data_filter<
obj[OutlineBox("Bivariate Gewichtsanpassung nach Körpergröße")]<
obj[OutlineBox("Bivariate Gewichtsanpassung nach Körpergröße")][FrameBox(1)]<
obj[OutlineBox("Bivariate Gewichtsanpassung nach Körpergröße")][FrameBox(1)]<
obj[OutlineBox("Bivariate Gewichtsanpassung nach Körpergröße")][FrameBox(1)]<
dt<
//Show(For Each Row(Excluded(RowState()) = 0));
//dt<
wait(0.1);//erzwungene Zeitverzögerung, die zum Löschen der Farblegende erforderlich ist
obj[OutlineBox("Bivariate Gewichtsanpassung nach Körpergröße")][BorderBox(2)]<
obj[OutlineBox("Bivariate Gewichtsanpassung nach Körpergröße")][FrameBox(1)]<Betreff: Automatische Neuberechnung(1) führt dazu, dass alte Legenden nach dem Löschen des übergeordneten Rahmens wieder angezeigt werden.
Ok, also habe ich mir eine einfache Problemumgehung ausgedacht: Ich habe die automatische Neuberechnung für das betreffende Plattformobjekt deaktiviert (indem ich <