<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />在 JMP 11 中,我正在編寫一個繪圖應用程序,允許用戶通過選擇定義行狀態的分組列來自定義圖例。 這需要刪除舊圖例(通過刪除父邊框框)並添加新圖例。但是我發現,如果在雙變量或可變性平台上設置自動重新計算(我沒有測試其他平台),這將導致除了新圖例之外,舊圖例的副本也會重新出現,當新圖例出現時一個是使用 FrameBox<
我還考慮過使用數據表上的 <回复:自動重新計算(1)會導致刪除父邊框框後舊圖例重新出現。
哦,我最終做的是使用 dt<回复:自動重新計算(1)會導致刪除父邊框框後舊圖例重新出現。
所以我一直在嘗試它,最終我能夠重新創建這種行為,甚至使用內置數據集之一。以下代碼將導致某種內存洩漏,從而導致 JMP 崩潰。
以下是重現錯誤的方法:
(1) 在窗口內創建一個平台,將自動重新計算設置為 1
(2)添加一些圖例
(3) 排除一些行
(4) 添加另一個圖例..即使刪除一個或兩個原始圖例,JMP 也會凍結
該錯誤表現為 jmp 在遇到無限內存洩漏時逐漸增加內存使用量(~10 MB/s)。
可以通過將表中所有行的排除狀態設置為 0 來避免此錯誤(即 對於每一行(排除(RowState())= 0)。
自動重新計算帶來的另一個怪癖是,除非在創建圖例後在刪除圖例之前存在強制時間延遲,否則圖例不會刪除。如果自動重新計算設置為 0,則刪除不會出現問題。
//崩潰的代碼
名稱默認為此處( 1 );
嘗試(關閉(dt,nosave));
dt = Open( "$SAMPLE_DATA/Big Class.jmp",invisible );
dt<<清除行狀態;
obj = NewWindow("test",biv_container = HListbox(biv = Bivariate( Y( :weight ), X( :height ),自動重新計算(1))));
/*
data_filter_container = ScrollBox(Size(200,500),data_filter = dt << 數據過濾器( 添加過濾器( columns( :性別, :年齡, :姓名, :身高, :體重 ) )));
data_filter<<模式( 選擇( 1 ), 顯示( 1 ), 包含( 1 ) );
obj[OutlineBox("體重與身高的二元擬合")]<
obj[OutlineBox("體重與身高的二元擬合")][FrameBox(1)]<
obj[OutlineBox("體重與身高的二元擬合")][FrameBox(1)]<
obj[OutlineBox("體重與身高的二元擬合")][FrameBox(1)]<<標記大小(6);
dt<<選擇其中(:性別==“F”)<<排除;
//顯示(對於每一行(排除(RowState()) = 0));
//dt<<選擇Where(:sex == "F")<<取消排除;
wait(0.1);//刪除顏色圖例所需的強制時間延遲
obj[OutlineBox("體重與身高的二元擬合")][BorderBox(2)]<
obj[OutlineBox("重量與高度的二元擬合")][FrameBox(1)]<回复:自動重新計算(1)會導致刪除父邊框框後舊圖例重新出現。
好吧,我想出了一個簡單的解決方法:我關閉了相關平台對像上的自動重新計算(通過在所選表上使用 <