我正在用Java創建一個Transliterating工具。它幾乎完成。但是,當我輸入速度如此之快的GUI凍結。調用modelToView()方法凍結Java Swing應用程序
因此,我調試應用程序以查明它發生的地方。
對方法JTextField.modelToView(pos)
的調用導致了這種情況,這進一步調用TextUI.modelToView(JTextComponent c, int pos)
。
public synchronized final void readLock() {
try {
while (currWriter != null) {
if (currWriter == Thread.currentThread()) {
// writer has full read access.... may try to acquire
// lock in notification
return;
}
wait();
}
numReaders += 1;
} catch (InterruptedException e) {
throw new Error("Interrupted attempt to aquire read lock");
}
}
如果當前線程不是寫線程其中要求wait()
:
它的出現,這種方法首先通過調用AbstractDocument::readLock()
方法,其源代碼是獲取關於文本組件的文件鎖。
但是,我只是在空格鍵被按下時突變文檔,我相信這是在EDT中發生的。而且,Swing
也會在EDT中改變它。另外,當調用DocumentListener.insertUpdate(DocumentEvent)
時,我打電話給JTextField.modelToView(pos)
。
那麼,是什麼原因,應用程序凍結!
以下是截圖:
應用截圖
當申請凍結
如果我最小化和最大化窗口
考慮提供一個[runnable示例](https://stackoverflow.com/help/mcve),它演示了您的問題。這不是代碼轉儲,而是您正在做的事情的一個例子,它突出了您遇到的問題。這會減少混淆和更好的反應 – MadProgrammer 2015-04-05 03:30:58
好吧,讓我看看,如果我可以使用一小段代碼重現問題! – Akshat 2015-04-05 03:32:55
「*我相信發生在EDT *」這可以通過打印布爾方法'EventQueue.isDispatchThread()' – 2015-04-05 04:07:06