GWT开发模式问题

GWT开发模式问题,gwt,jetty,Gwt,Jetty,我正在开发模式下运行一个GWT应用程序,其中包含一个定制的Jetty容器。应用程序第一次加载正常,但是,如果我刷新它,在“开发模式”窗口中会出现以下错误(路径已更改): 00:16:44.854[错误]无法创建文件“C:\somePath\src\war\msjavaSnack\C4EA130FD0ED44BE513FEEDDE13614DA.cache.png” java.io.FileNotFoundException:C:\somePath\src\war\msjavaSnack\C4EA

我正在开发模式下运行一个GWT应用程序,其中包含一个定制的Jetty容器。应用程序第一次加载正常,但是,如果我刷新它,在“开发模式”窗口中会出现以下错误(路径已更改):

00:16:44.854[错误]无法创建文件“C:\somePath\src\war\msjavaSnack\C4EA130FD0ED44BE513FEEDDE13614DA.cache.png”
java.io.FileNotFoundException:C:\somePath\src\war\msjavaSnack\C4EA130FD0ED44BE513FEEDDE13614DA.cache.png(无法对打开用户映射节的文件执行请求的操作)
在java.io.FileOutputStream.open(本机方法)
位于java.io.FileOutputStream。(FileOutputStream.java:194)
位于java.io.FileOutputStream。(FileOutputStream.java:145)
位于com.google.gwt.core.ext.linker.impl.StandardLinkerContext.writeArtifactToFile(StandardLinkerContext.java:658)
位于com.google.gwt.core.ext.linker.impl.StandardLinkerContext.produceOutputDirectory(StandardLinkerContext.java:595)
位于com.google.gwt.dev.DevMode.produceOutput(DevMode.java:476)
位于com.google.gwt.dev.DevModeBase.relink(DevModeBase.java:1131)
访问com.google.gwt.dev.DevModeBase.access$000(DevModeBase.java:67)
位于com.google.gwt.dev.DevModeBase$2.accept(DevModeBase.java:1076)
位于com.google.gwt.dev.shell.ShellModuleSpaceHost$1.accept(ShellModuleSpaceHost.java:122)
位于com.google.gwt.dev.shell.StandardRebinoracle$Rebinder.rebind(StandardRebinoracle.java:59)
在com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:154)
位于com.google.gwt.dev.shell.ShellModuleSpaceHost.rebind(ShellModuleSpaceHost.java:119)
位于com.google.gwt.dev.shell.ModuleSpace.rebind(ModuleSpace.java:531)
位于com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:414)
位于com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:39)
位于com.google.gwt.core.client.gwt.create(gwt.java:98)
位于com.extjs.gxt.ui.client.gxt.(gxt.java:38)
位于com.extjs.gxt.ui.client.widget.Component.(Component.java:202)
位于msjava.snack.gui.client.MSHeaderPanelViewport。(MSHeaderPanelViewport.java:62)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:513)
位于com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:422)
位于com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:361)
位于com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:185)
在com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:380)上
在com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222)
运行(Thread.java:662)
更新


在ProcessExplorer中,我可以看到托管Jetty的JVM进程有一个文件的开放句柄,因此这可能是其他JVM(托管开发模式)无法写入该文件的原因。有什么办法可以解决吗?

似乎同一个文件上的两个(打开/关闭)(打开/关闭)rutine过快地相继出现导致了这一问题。。。一些开发人员建议调用gc。检查每次i/o操作是否正确关闭。不要过早执行完成(打开、循环(写入)、关闭)。似乎当一个操作即将完成,而第二个请求到达时,就会抛出问题。

我在本页找到了解决方案:

编辑:

上面的URL现在已失效

现在,在Jetty的wiki中很容易找到解决方案:

Jetty在webdefault.xml文件中为 启用或禁用内存映射的使用的DefaultServlet 文件夹。如果您在Windows上运行并且正在进行文件锁定 出现问题时,应将此开关设置为禁用内存映射文件 缓冲区

默认的webdefault.xml文件位于lib/jetty.jar中 org/eclipse/jetty/webapp/webdefault.xml。将其提取到方便的位置 磁盘位置,并对其进行编辑以将useFileMappedBuffer更改为false


您有防病毒软件吗?(哦,好吧,在Windows上,你应该这样做;但你可能应该在你的工作区禁用它)你能发布这个解决方案是什么吗?链接断了。
00:16:44.854 [ERROR] Unable to create file 'C:\somePath\src\war\msjavaSnack\C4EA130FD0ED44BE513FEEDDE13614DA.cache.png'
java.io.FileNotFoundException: C:\somePath\src\war\msjavaSnack\C4EA130FD0ED44BE513FEEDDE13614DA.cache.png (The requested operation cannot be performed on a file with a user-mapped section open) 
at java.io.FileOutputStream.open(Native Method) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:194) 
at java.io.FileOutputStream.<init>(FileOutputStream.java:145) 
at com.google.gwt.core.ext.linker.impl.StandardLinkerContext.writeArtifactToFile(StandardLinkerContext.java:658) 
at com.google.gwt.core.ext.linker.impl.StandardLinkerContext.produceOutputDirectory(StandardLinkerContext.java:595) 
at com.google.gwt.dev.DevMode.produceOutput(DevMode.java:476) 
at com.google.gwt.dev.DevModeBase.relink(DevModeBase.java:1131) 
at com.google.gwt.dev.DevModeBase.access$000(DevModeBase.java:67) 
at com.google.gwt.dev.DevModeBase$2.accept(DevModeBase.java:1076) 
at com.google.gwt.dev.shell.ShellModuleSpaceHost$1.accept(ShellModuleSpaceHost.java:122) 
at com.google.gwt.dev.shell.StandardRebindOracle$Rebinder.rebind(StandardRebindOracle.java:59) 
at com.google.gwt.dev.shell.StandardRebindOracle.rebind(StandardRebindOracle.java:154) 
at com.google.gwt.dev.shell.ShellModuleSpaceHost.rebind(ShellModuleSpaceHost.java:119) 
at com.google.gwt.dev.shell.ModuleSpace.rebind(ModuleSpace.java:531) 
at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:414) 
at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:39) 
at com.google.gwt.core.client.GWT.create(GWT.java:98) 
at com.extjs.gxt.ui.client.GXT.<clinit>(GXT.java:38) 
at com.extjs.gxt.ui.client.widget.Component.<clinit>(Component.java:202) 
at msjava.snack.gui.client.MSHeaderPanelViewport.<init>(MSHeaderPanelViewport.java:62) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:422) 
at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:361) 
at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:185) 
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:380) 
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222) 
at java.lang.Thread.run(Thread.java:662)