Что с GWT и внешними библиотеками? - PullRequest
0 голосов
/ 02 января 2012

Я делаю GWT-приложение, в котором пользователи могут загружать файлы.У меня вопрос ...

Что не так с GWT ??Кажется, что каждый раз, когда я пытаюсь включить файл JAR в свой проект, это не нравится.Я использую Eclipse.Все компилируется нормально, но во время выполнения случаются исключения UmbrellaExceptions, которые в конечном итоге возвращаются к некоторому исключению ClassNotFoundException (касающемуся любого нового jarrified класса, который я только что пытался использовать).не помню точно, в чем заключается сделка;по какой-то причине GWT просто не совместим с некоторыми библиотеками ..?Как java.io, например.Практически все в этом пакете приводит к тому, что это происходит.Например, я даже не могу использовать FileNotFoundException для простого ввода-вывода файла.

Опять же, просто для пояснения: все импортируется и компилируется нормально, но GWT по какой-то причине не хочет загружать определенные классы.*

Моя последняя проблема - попытка использовать Apache Tika для проверки файлов.Попытка создания экземпляра любого из их классов, таких как

Metadata metadata = new Metadata();

, вызывает

java.lang.ClassNotFoundException: org.apache.tika.metadata.Metadata
at com.google.gwt.dev.shell.CompilingClassLoader.findClass(CompilingClassLoader.java:1061)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at gwtupload.client.Uploader$10.onSubmit(Uploader.java:454)
at com.google.gwt.user.client.ui.FormPanel$SubmitEvent.dispatch(FormPanel.java:178)
at com.google.gwt.user.client.ui.FormPanel$SubmitEvent.dispatch(FormPanel.java:1)
at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1)
at com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40)
at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193)
at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88)
at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:127)
at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:129)
at com.google.gwt.user.client.ui.FormPanel.fireSubmitEvent(FormPanel.java:618)
at com.google.gwt.user.client.ui.FormPanel.submit(FormPanel.java:556)
at gwtupload.client.Uploader.submit(Uploader.java:1051)
at gwtupload.client.SingleUploader$1.onClick(SingleUploader.java:141)
at com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:54)
at com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:1)
at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1)
at com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40)
at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193)
at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88)
at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:127)
at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:129)
at com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116)
at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:177)
at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1351)
at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1307)
at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213)
at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
at java.lang.Thread.run(Unknown Source)

Ответы [ 2 ]

5 голосов
/ 03 января 2012

GWT компилирует ваш код в Javascript, который запускается в веб-браузере.Вы не можете использовать java.io для простого файлового ввода-вывода, потому что Javascript в браузере не разрешает делать файловый ввод-вывод.Почти любая интересная библиотека получит доступ к классам, которые не эмулируются средой выполнения GWT.

В дополнение к этому среда выполнения GWT не будет автоматически включать файл JAR при компиляции в Javascript.Вам нужен доступный исходный код, и вам нужно написать XML-дескриптор для включения источника библиотеки в генерацию Javascript.

См. этот поток и этот учебник по расширениюGWT.

3 голосов
/ 02 января 2012

Это потому, что из-за того, как он работает, GWT должен эмулировать классы JRE .

Если вы хотите использовать другой класс в GWT, вам придется извлечь его из базовых классов GWT. Существует несколько библиотек, расширяющих GWT на стороне клиента.

Однако на стороне сервера может использоваться любая библиотека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...