Java Tomcat显示空白页-GWT devmode工作正常

Java Tomcat显示空白页-GWT devmode工作正常,java,eclipse,gwt,tomcat,Java,Eclipse,Gwt,Tomcat,我正在eclipse上开发一个GWT项目,当我运行开发模式时,一切都很好。但是当我在tomcat服务器上部署WAR文件(根据本指南生成)时,http://localhost:8080/myproj/仅显示空白页。 我尝试将Window.alert(“…”添加为onModuleLoad()方法中的第一行,它确实显示正确。 清除浏览器缓存是无用的。 服务器启动执行时没有问题,也没有异常。 我该怎么解决这个问题 这是我的入门课程 public class Segnalazioni_Degrado im

我正在eclipse上开发一个GWT项目,当我运行开发模式时,一切都很好。但是当我在tomcat服务器上部署WAR文件(根据本指南生成)时,
http://localhost:8080/myproj/
仅显示空白页。 我尝试将
Window.alert(“…”
添加为
onModuleLoad()
方法中的第一行,它确实显示正确。 清除浏览器缓存是无用的。 服务器启动执行时没有问题,也没有异常。 我该怎么解决这个问题

这是我的入门课程

public class Segnalazioni_Degrado implements EntryPoint {

protected static List<Macrocategoria> listaMacrocategorie;
protected static List<Segnalazione> segnalazioniAttiveCached = new ArrayList<Segnalazione>();
protected static List<SegnalazioneRisolta> segnalazioniRisolteCached = new ArrayList<SegnalazioneRisolta>();

protected static final DataLayerServiceAsync dataLayerService = GWT
        .create(DataLayerService.class);
protected static final LoginServiceAsync loginService = GWT
        .create(LoginService.class);
protected static final MailServiceAsync mailService = GWT
        .create(MailService.class);

protected static Properties props;
private final String TITOLO = "PORTALE SEGNALAZIONI DEGRADO";

private LatLng romaLatLng;

private DockLayoutPanel mainPnl;

private HorizontalPanel northPnl;
private HorizontalPanel southPnl;
private VerticalPanel westPnl;
private AbsolutePanel centerPnl;

protected static StatsPanel statsPnl;
protected static MenuPanel menuPnl;
protected static LoginPanel loginPnl;
protected static LegendPanel legendPnl;

protected static MapWidget map;
private Label titoloLbl;
private/* Button */FocusWidget areaRiservataBtn;
private Button followUsOnTwitterBtn;
private HTML mailto;

/**
 * TODO tweet segnalazione inserita o risolta, porta su .css tutto il
 * possibile, prendi tutto da config, fai log su server, crea mail, leggenda
 * icone, elimina file foto non solo link
 */

public void onModuleLoad() {
    loadProps();
    buildUI();
}

void loadProps() {
    props.set("scarsa manutenzione manto stradale", "images/red.png");
    props.set("veicolo abbandonato", "images/red.png");
    props.set("discarica abusiva", "images/green.png");
    props.set("accumulo spazzatura", "images/green.png");
}

void buildUI() {
    Maps.loadMapsApi("", "2", false, new Runnable() {
        public void run() {
            buildHomePage();
        }
    });
}

private void buildHomePage() {

    mainPnl = new DockLayoutPanel(Unit.PCT);
    mainPnl.setStyleName("mainPanel");
    northPnl = new HorizontalPanel();
    northPnl.setStyleName("northPanel");
    southPnl = new HorizontalPanel();
    southPnl.setStyleName("southPanel");
    westPnl = new VerticalPanel();
    westPnl.setStyleName("westPanel");
    centerPnl = new AbsolutePanel();
    centerPnl.setStyleName("centerPnl");

    loginPnl = new LoginPanel();
    statsPnl = new StatsPanel();
    menuPnl = new MenuPanel();

    Segnalazioni_Degrado.dataLayerService
    .getListaMacrocategorie(new AsyncCallback<List<Macrocategoria>>() {

        @Override
        public void onFailure(Throwable caught) {
            caught.printStackTrace();
        }

        @Override
        public void onSuccess(List<Macrocategoria> result) {

            Segnalazioni_Degrado.listaMacrocategorie = result;
            centerPnl.add(new LegendPanel());
        }

    });


    /**
     * costruisco la Google Map
     */
    Size mapSize = Size.newInstance(500, 500);
    MapOptions mapOpts = MapOptions.newInstance();
    mapOpts.setSize(mapSize);
    romaLatLng = LatLng.newInstance(41.8902624, 12.4923096);
    map = new MapWidget(romaLatLng, 12, mapOpts);
    map.checkResizeAndCenter();
    map.setSize("99%", "99%");
    map.addControl(new LargeMapControl());
    map.setDoubleClickZoom(true);
    map.setScrollWheelZoomEnabled(true);
    map.setStyleName("map");

    /**
     * costruisco il titolo del portale
     */
    titoloLbl = new Label(TITOLO);
    titoloLbl.setStyleName("titolo");

    /**
     * costruisco bottone per accedere ad area riservata
     */
    /* areaRiservataBtn = new Button("Accedi all'area riservata"); */
    areaRiservataBtn = new Button("AREA RISERVATA");
    areaRiservataBtn.setStyleName("bottomBtn");
    areaRiservataBtn.addClickHandler(new ClickHandler() {
        @Override
        public void onClick(ClickEvent event) {
            new AreaRiservataDialog();
        }
    });

    /**
     * costruisco bottone twitter
     */

    followUsOnTwitterBtn = new Button();

    followUsOnTwitterBtn.addStyleName("bottomBtn");
    followUsOnTwitterBtn.addStyleName("twitter");


    followUsOnTwitterBtn
            .getElement()
            .appendChild(
                    new HTML(
                            "<div><img src=images/twitter.gif><b>segui @stop_degrado</b></div>")
                            .getElement());
    followUsOnTwitterBtn.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            Window.open("https://twitter.com/stop_degrado", "_blank", "");
        }

    });

    /**
     * costruisco bottone mailto
     */
    mailto = new HTML("<a href=mailto:dummy@fake.foo> Contattaci </a>");
    mailto.setStyleName("bottomBtn");

    /**
     * creo bottone ABOUT US
     */
    Button aboutus = new Button("ABOUT US");
    aboutus.setStyleName("bottomBtn");
    aboutus.addClickHandler(new ClickHandler() {

        @Override
        public void onClick(ClickEvent event) {
            new AboutUsPopup();
        }

    });



    northPnl.add(titoloLbl);
    northPnl.add(loginPnl);

    westPnl.add(menuPnl);

    westPnl.add(statsPnl);

    southPnl.add(followUsOnTwitterBtn);
    southPnl.add(aboutus);
    southPnl.add(areaRiservataBtn);
    southPnl.add(mailto);

    centerPnl.add(map);


    mainPnl.addNorth(northPnl, 8);
    mainPnl.addWest(westPnl, 30);
    mainPnl.addSouth(southPnl, 3.5);
    mainPnl.add(centerPnl);

    RootLayoutPanel.get().add(mainPnl);

    MenuPanel.refreshBtn.click();

}
}
公共类Segnalazioni\u Degrado实现入口点{
受保护的静态列表列表类别;
受保护的静态列表segnalazionitativecached=new ArrayList();
受保护的静态列表segnalazioniRisolteCached=new ArrayList();
受保护的静态最终dataLayerService异步dataLayerService=GWT
.create(DataLayerService.class);
受保护的静态最终登录服务异步登录服务=GWT
.create(LoginService.class);
受保护的静态最终MailServiceAsync mailService=GWT
.create(MailService.class);
受保护的静态属性道具;
私有最终字符串TITOLO=“PORTALE SEGNALAZIONI DEGRADO”;
私人车床;
私人码头管理局;
私人HorizontalPanel northPnl;
私人水平面板southPnl;
私人垂直面板westPnl;
私人绝对面板中心PNL;
受保护的静态StatsPanel statsPnl;
受保护的静态菜单面板菜单NL;
受保护的静态LoginPanel loginPnl;
受保护的静态LegendPanel legendPnl;
受保护的静态映射;
自有品牌替洛尔;
private/*按钮*/FocusWidget areaRiservataBtn;
私有按钮跟随OnTwitterbtn;
私人HTML邮件;
/**
*TODO tweet是一个很好的例子,它是一个很好的例子
*可能,prendi tutto da配置,fai日志su服务器,crea邮件,leggenda
*icone,elimina文件foto非单独链接
*/
moduleload()上的公共void{
loadProps();
buildUI();
}
void loadProps(){
道具套装(“scarsa manutenzione manto stradale”,“images/red.png”);
道具集(“veicolo abbandonato”,“images/red.png”);
道具集(“discarica Abrisva”,“images/green.png”);
道具集(“accumulo spazzatura”、“images/green.png”);
}
void buildUI(){
loadMapsApi(“,”2“,false,new Runnable()){
公开募捐{
buildHomePage();
}
});
}
私人网页(){
mainPnl=新的DockLayoutPanel(单位:PCT);
mainPnl.setStyleName(“主面板”);
northPnl=新水平面板();
northPnl.setStyleName(“northPanel”);
southPnl=新水平面板();
southPnl.setStyleName(“southPanel”);
westPnl=新垂直面板();
westPnl.setStyleName(“westPanel”);
centerPnl=新的绝对面板();
centerPnl.setStyleName(“centerPnl”);
loginPnl=新的LoginPanel();
statsPnl=新的StatsPanel();
menuPnl=新的MenuPanel();
Segnalazioni_Degrado.dataLayerService
.getListaMacrocategorie(新的AsyncCallback(){
@凌驾
失败时的公共无效(可丢弃){
已捕获。printStackTrace();
}
@凌驾
成功时公开作废(列表结果){
Segnalazioni_Degrado.listaMacrocategorie=结果;
添加(新LegendPanel());
}
});
/**
*谷歌地图
*/
Size mapSize=Size.newInstance(500500);
MapOptions mapOpts=MapOptions.newInstance();
设置大小(mapSize);
romaLatLng=LatLng.newInstance(41.8902624,12.4923096);
map=新的MapWidget(romaLatLng,12,mapOpts);
map.checkResizeAndCenter();
map.setSize(“99%”,即“99%”);
addControl(新的LargeMapControl());
map.setDoubleClickZoom(真);
map.setScrollWheelZoomEnabled(真);
地图名称(“地图”);
/**
*科斯特鲁伊斯科酒店
*/
titoloLbl=新标签(TITOLO);
titoloLbl.setStyleName(“titolo”);
/**
*costruisco每间客房面积
*/
/*areaRiservataBtn=新建按钮(“Accedi all'area riservata”)*/
AreaRiservatatabtn=新按钮(“AREA RISERVATA”);
areaRiservataBtn.setStyleName(“底部BTN”);
areaRiservataBtn.addClickHandler(新的ClickHandler(){
@凌驾
公共作废一次点击(点击事件){
新的AreaRiservataDialog();
}
});
/**
*costruisco bottone推特
*/
followUsOnTwitterBtn=新建按钮();
followUsOnTwitterBtn.addStyleName(“bottomBtn”);
followUsOnTwitterBtn.addStyleName(“twitter”);
followUsOnTwitterBtn
.getElement()
.孩子(
新HTML(
“segui@stop\u degrado”)
.getElement());
followUsOnTwitterBtn.addClickHandler(新的ClickHandler(){
@凌驾
公共作废一次点击(点击事件){
窗口打开(“https://twitter.com/stop_degrado“,”空白“,”);
}
});
/**
*costruisco bottone mailto
*/
mailto=新的HTML(“”);
mailto.setStyleName(“bottomBtn”);
/**
*克里奥·波顿关于我们
*/
Button aboutus=新按钮(“关于我们”);
关于setStyleName(“bottomBtn”);
aboutus.addClickHandler(新的ClickHandler(){
@凌驾
公共作废一次点击(点击事件){
关于popup()的新信息;
}
});
northPnl.add(titoloLbl);
northPnl.add(loginPnl);
新增(menuPnl);
新增(国家统计局);
加上(followUsOnTwitterBtn);
加上(大约);
southPnl.add(areaRiservataBtn);
加上(邮寄);
中心位置添加(地图);
mainPnl.addNorth(northPnl,8);
mainPnl.addWest(westPnl,30岁);
mainPnl.addSouth(southPnl,3.5);
mainPnl.add(centerPnl);
RootLayoutPanel.get().add(mainPnl);
MenuPanel.refreshBtn.click();
}
}

我认为它是一个
空指针

protected static Properties props; // << NULL

public void onModuleLoad() {
    loadProps(); // props is still NULL
    buildUI();
}

void loadProps() {
    // props is still NULL
    props.set("scarsa manutenzione manto stradale", "images/red.png"); // BANG!
[...]
受保护的静态属性道具;// 我认为