我有一個類,它從Swing中裝飾JTextComponent。它包含的方法可以從任何線程調用,所以我必須確保,與JTextComponent一起使用的代碼將由AWT線程執行。確定AWT線程
第二個要求是,調用整個方法的線程將「等待」,直到AWT線程完成任務。
public String getSelectedText() {
Callable c = new Callable() {
@Override
public Object call() throws Exception {
if (area.getSelectedText() == null) {
return "";
}
return area.getSelectedText();
}
};
if (Thread.currentThread().getName().contains("AWT")) {
return (String)c.call();
}
else {
FutureTask task = new FutureTask(c);
SwingUtilities.invokeLater(task);
while (!task.isDone()) {
//waiting
}
try {
return (String)task.get();
}
catch (InterruptedException | ExecutionException ex) {
return "";
}
}
}
該代碼對我來說很好,但仍然存在一個問題。如果有人想要使用我的課,重命名AWT線程,那麼它陷入僵局。
是否有任何方法明確地標識AWT線程並避免此問題?
謝謝
謝謝!而已 – user3334332