проблемы с потоками при Java Swing и веб-запуске
-
16-09-2019 - |
Вопрос
РЕДАКТИРОВАТЬ:После исправления нескольких проблем у меня возникла более серьезная проблема, вызванная Apache POI, который я использую.Я сейчас работаю над этим.Судя по всему, это ограничивается песочницей.
Я новичок в Swing и создал небольшое приложение Swing, которое теперь мне нужно запустить через веб-запуск.Я пытаюсь использовать FileOpenService и обновить текстовое отображение.Я думаю, что у меня возникли проблемы с потоками, потому что диалоговое окно FileOpenService никогда не появляется, и мой текстовый дисплей не обновляется.
Я действительно не могу найти примеров, когда бы они делали что-то другое, чем я сейчас.
Идеи?
Спасибо!
Редактировать:Теперь у меня появляется диалоговое окно FileOpenService.Я изменил свое основное на это:
public static void main(String[] args) throws Exception {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainFrame();
}
});
}
Однако я все еще не могу обновить свой дисплей.Вот где я делаю обновление:
Runnable r = new Runnable() {
public void run() {
for (final String s : Logger.getMessages())
append(s + "\n");
}
};
try {
if (SwingUtilities.isEventDispatchThread())
r.run();
else
SwingUtilities.invokeAndWait(r);
}
и мой метод добавления:
private void append(Color c, String s) {// throws Exception {
StyleContext sc = StyleContext.getDefaultStyleContext();
AttributeSet aset = sc.addAttribute(SimpleAttributeSet.EMPTY,
StyleConstants.Foreground, c);
int len = _textPaneLog.getDocument().getLength();
try {
_textPaneLog.getDocument().insertString(len, s, aset);
} catch (BadLocationException e) {
e.printStackTrace();
}
}
Решение 2
Проблема, с которой я столкнулся, не имела ничего общего со всем этим.В другой части моего кода, рядом с тем местом, где я пытался это сделать, я вызывал завершение работы приложения.Это была задержка от чего-то еще, что я пробовал, и что было упущено, когда я работал над реализацией этого.
Другие советы
Вы вызываете *.openFileDialog(foo,bar), верно?
FileOpenService fos = (FileOpenService)ServiceManager.lookup("javax.jnlp.FileOpenService");
FileContents fc = fos.openFileDialog(null, null);
Извините, если это глупый вопрос, но пока вы не обновите свой вопрос, указав источник, я не могу думать ни о чем другом.