Java GWT出现奇怪的意外错误,雨伞异常
我正在通过GWT和Eclipse构建一个项目,以实现一个类似于Yahoo Answer的站点,直到几天前它还运行得很好,但从昨天开始,我注意到了一个我以前没有看到的bug,这非常奇怪,因为我会注意到。基本上,在Google Chrome的控制台上,当我试图可视化与问题相关的答案时,我收到了一个未捕获的错误,似乎数据库(mapdb 1.0.9)没有返回任何东西 对于兼容性问题,我使用EclipseMarsforJava7(1.7)和GWT2.8.0 我将通过点击问题来发布代码中没有被复制的部分Java GWT出现奇怪的意外错误,雨伞异常,java,eclipse,google-chrome,gwt,gwt-rpc,Java,Eclipse,Google Chrome,Gwt,Gwt Rpc,我正在通过GWT和Eclipse构建一个项目,以实现一个类似于Yahoo Answer的站点,直到几天前它还运行得很好,但从昨天开始,我注意到了一个我以前没有看到的bug,这非常奇怪,因为我会注意到。基本上,在Google Chrome的控制台上,当我试图可视化与问题相关的答案时,我收到了一个未捕获的错误,似乎数据库(mapdb 1.0.9)没有返回任何东西 对于兼容性问题,我使用EclipseMarsforJava7(1.7)和GWT2.8.0 我将通过点击问题来发布代码中没有被复制的部分
public class MostraRisposte {
private VerticalPanel verticalPanel = null;
public MostraRisposte(VerticalPanel verticalPanel) {
this.verticalPanel = verticalPanel;
}
public void onModuleLoad(Domanda currentSelection) {
this.verticalPanel.add(new HTML("<br>"));
this.verticalPanel.add(new HTML("<br>"));
final Grid answerGridPanel = new Grid(8, 2);
answerGridPanel.setWidget(0, 0, new Label("Utente: "));
answerGridPanel.setWidget(0, 1, new Label(currentSelection.getUserName()));
answerGridPanel.setWidget(1, 0, new Label("Testo: "));
answerGridPanel.setWidget(1, 1, new Label(currentSelection.getText()));
answerGridPanel.setWidget(2, 0, new Label("Data: "));
answerGridPanel.setWidget(2, 1, new Label(currentSelection.getDay()));
answerGridPanel.setWidget(4, 0, new Label("Link1: "));
answerGridPanel.setWidget(4, 1, new Label(currentSelection.getLinkList().get(0)));
answerGridPanel.setWidget(5, 0, new Label("Link2: "));
answerGridPanel.setWidget(5, 1, new Label(currentSelection.getLinkList().get(1)));
answerGridPanel.setWidget(6, 0, new Label("Link3: "));
answerGridPanel.setWidget(6, 1, new Label(currentSelection.getLinkList().get(2)));
answerGridPanel.setWidget(7, 0, new Label("Link4: "));
answerGridPanel.setWidget(7, 1, new Label(currentSelection.getLinkList().get(3)));
this.verticalPanel.add(answerGridPanel);
final GwaServiceAsync gwanswer = GWT.create(GwaService.class);
final int id = currentSelection.getIdQuestion();
gwanswer.ordinaRisposte(id, new AsyncCallback<List<Risposta>>() {
@Override
public void onFailure(Throwable caught) {
PopupPanel popup = new PopupPanel(true);
popup.setWidget(new HTML("<font color='red'>Errore</font>"));
popup.center();
}
@Override
public void onSuccess(List<Risposta> response) {
final CellTable<Risposta> questionsTable = new CellTable<>(20);
questionsTable.addColumn(new TextColumn<Risposta>() {
@Override
public String getValue(Risposta risposta) {
return risposta.getText();
}
}, "Risposta");
questionsTable.addColumn(new TextColumn<Risposta>() {
@Override
public String getValue(Risposta answer) {
return answer.getUserName();
}
}, "Utente");
questionsTable.addColumn(new TextColumn<Risposta>() {
@Override
public String getValue(Risposta risposta) {
return risposta.getDay();
}
}, "Giorno");
questionsTable.addColumn(new TextColumn<Risposta>() {
@Override
public String getValue(Risposta risposta) {
return risposta.getTime();
}
}, "Ora");
questionsTable.addColumn(new TextColumn<Risposta>() {
@Override
public String getValue(Risposta risposta) {
return risposta.getJudgeEmail();
}
}, "Giudice");
final TextColumn<Risposta> ratingTextColumn = new TextColumn<Risposta>() {
@Override
public String getValue(Risposta risposta) {
return risposta.getRating();
}
};
questionsTable.addColumn(ratingTextColumn, "Voto");
ratingTextColumn.setSortable(true);
questionsTable.addColumn(new TextColumn<Risposta>() {
@Override
public String getValue(Risposta risposta) {
return risposta.getLinkList().get(0);
}
}, "Link");
questionsTable.addColumn(new TextColumn<Risposta>() {
@Override
public String getValue(Risposta risposta) {
return risposta.getLinkList().get(1);
}
}, "Link");
questionsTable.addColumn(new TextColumn<Risposta>() {
@Override
public String getValue(Risposta risposta) {
return risposta.getLinkList().get(2);
}
}, "Link");
questionsTable.addColumn(new TextColumn<Risposta>() {
@Override
public String getValue(Risposta risposta) {
return risposta.getLinkList().get(3);
}
}, "Link");
final ListDataProvider<Risposta> dataProvider = new ListDataProvider<>();
dataProvider.addDataDisplay(questionsTable);
final List<Risposta> list = dataProvider.getList();
for (Iterator<Risposta> iterator = response.iterator(); iterator.hasNext();) {
final Risposta risposta = iterator.next();
list.add(risposta);
}
final ListHandler<Risposta> columnSortHandler = new ListHandler<>(list);
columnSortHandler.setComparator(ratingTextColumn, new Comparator<Risposta>() {
@Override
public int compare(Risposta option1, Risposta option2) {
if (option1.getRating().equals(option2.getRating())) {
if (!option1.getDate().after(option2.getDate())) {
return -1;
} else {
return 1;
}
} else {
return (option2 != null && option1 != null) ? option1.getRating().compareTo(option2.getRating())
: 1;
}
}
});
questionsTable.addColumnSortHandler(columnSortHandler);
questionsTable.getColumnSortList().push(ratingTextColumn);
questionsTable.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
final SingleSelectionModel<Risposta> selectionModel = new SingleSelectionModel<>();
questionsTable.setSelectionModel(selectionModel);
selectionModel.addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
if (UtenteAttuale.accountType == 1) {
final Risposta currentSelection1 = selectionModel.getSelectedObject();
if (currentSelection1 != null) {
final AggiungiVoto iv = new AggiungiVoto(MostraRisposte.this.verticalPanel);
iv.onModuleLoad(currentSelection1);
}
}
}
});
questionsTable.setRowCount(response.size(), true);
questionsTable.setRowData(0, response);
MostraRisposte.this.verticalPanel.add(questionsTable);
}
});
}
公共类MostraRisposte{
私有VerticalPanel VerticalPanel=null;
公共MostraRisposte(垂直面板垂直面板){
this.verticalPanel=verticalPanel;
}
模块加载时的公共无效(Domanda currentSelection){
this.verticalPanel.add(新HTML(“
”);
this.verticalPanel.add(新HTML(“
”);
最终网格应答GridPanel=新网格(8,2);
setWidget(0,0,新标签(“utete:”);
setWidget(0,1,新标签(currentSelection.getUserName());
setWidget(1,0,新标签(“Testo:”);
setWidget(1,1,新标签(currentSelection.getText());
setWidget(2,0,新标签(“数据”);
setWidget(2,1,新标签(currentSelection.getDay());
setWidget(4,0,新标签(“Link1:”);
setWidget(4,1,新标签(currentSelection.getLinkList().get(0));
setWidget(5,0,新标签(“Link2:”);
setWidget(5,1,新标签(currentSelection.getLinkList().get(1));
setWidget(6,0,新标签(“Link3:”);
setWidget(6,1,新标签(currentSelection.getLinkList().get(2));
setWidget(7,0,新标签(“Link4:”);
setWidget(7,1,新标签(currentSelection.getLinkList().get(3));
this.verticalPanel.add(answerGridPanel);
最终GwaServiceAsync gwanswer=GWT.create(GwaService.class);
final int id=currentSelection.getIdQuestion();
gwanswer.ordinaRisposte(id,新的AsyncCallback(){
@凌驾
失败时的公共无效(可丢弃){
PopupPanel popup=新的PopupPanel(真);
setWidget(新的HTML(“错误”));
popup.center();
}
@凌驾
成功时公共无效(列表响应){
最终细胞表问题稳定=新细胞表(20);
questionsTable.addColumn(新的TextColumn(){
@凌驾
公共字符串getValue(Risposta Risposta){
返回risposta.getText();
}
}"Risposta";;
questionsTable.addColumn(新的TextColumn(){
@凌驾
公共字符串getValue(Risposta应答){
返回answer.getUserName();
}
}“中尉”);
questionsTable.addColumn(新的TextColumn(){
@凌驾
公共字符串getValue(Risposta Risposta){
返回risposta.getDay();
}
}“Giorno”);
questionsTable.addColumn(新的TextColumn(){
@凌驾
公共字符串getValue(Risposta Risposta){
返回risposta.getTime();
}
}“Ora”);
questionsTable.addColumn(新的TextColumn(){
@凌驾
公共字符串getValue(Risposta Risposta){
返回risposta.getJudgeEmail();
}
}“Giudice”);
最终文本列分级文本列=新文本列(){
@凌驾
公共字符串getValue(Risposta Risposta){
返回risposta.getRating();
}
};
addColumn(ratingTextColumn,“Voto”);
ratingTextColumn.setSortable(真);
questionsTable.addColumn(新的TextColumn(){
@凌驾
公共字符串getValue(Risposta Risposta){
返回risposta.getLinkList().get(0);
}
}“链接”);
questionsTable.addColumn(新的TextColumn(){
@凌驾
公共字符串getValue(Risposta Risposta){
返回risposta.getLinkList().get(1);
}
}“链接”);
questionsTable.addColumn(新的TextColumn(){
@凌驾
公共字符串getValue(Risposta Risposta){
返回risposta.getLinkList().get(2);
}
}“链接”);
questionsTable.addColumn(新的TextColumn(){
@凌驾
公共字符串getValue(Risposta Risposta){
返回risposta.getLinkList().get(3);
}
}“链接”);
final ListDataProvider dataProvider=新ListDataProvider();
dataProvider.addDataDisplay(questionsTable);
final List=dataProvider.getList();
for(Iterator Iterator=response.Iterator();Iterator.hasNext();){
final Risposta Risposta=iterator.next();
列表。添加(RISPASTA);
}
final ListHandler columnSortHandler=新ListHandler(列表);
setComparator(ratingTextColumn,new Comparator()){
@凌驾
公共整数比较(Risposta选项1、Risposta选项2){
if(option1.getRating().equals(option2.getRating())){
如果(!option1.getDate()。在(option2.getDate())之后){
返回-1;
}否则{
返回1;
GWT.setUncaughtExceptionHandler(e -> showError(e));
Throwable unwrapped = unwrap(e);
GWT.log("Uncaught exception catched", unwrapped);
/**
* Unwrap the given exception.
* @param e The exception.
* @return Unwrapped version of the exception
*/
private static Throwable unwrap(Throwable e)
{
if (e instanceof UmbrellaException)
{
UmbrellaException ue = (UmbrellaException) e;
if (ue.getCauses().size() == 1)
{
return unwrap(ue.getCauses().iterator().next());
}
}
return e;
}