учебник оконостроителя не работает - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь сделать учебник, который позволяет добавлять и удалять акции и наблюдать их цену и изменение. В этом руководстве показано, как использовать конструктор GUI GWT Designer для создания и разработки приложения Stock Watcher на основе руководства GWT.

http://code.google.com/webtoolkit/tools/gwtdesigner/tutorials/stockwatcher.html#design_ui

Пока у меня есть SW.java:

package edu.gatech.client;
import java.util.ArrayList;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class SW implements EntryPoint {
    private RootPanel rootPanel;
    private FlexTable stocksFlexTable;
    private HorizontalPanel addPanel;
    private VerticalPanel mainWindow;
    private TextBox newSymbolTextBox;
    private Button addButton;
    private Label lastUpdatedLabel;
    private ArrayList <String> stocks = new ArrayList<String>(); //Add this line



        public void onModuleLoad() {
        rootPanel = RootPanel.get();

        mainWindow = new VerticalPanel();
        rootPanel.add(mainWindow, 10, 10);
        mainWindow.setSize("267px", "175px");

        FlexTable stocksFlexTable = new FlexTable();

        //Add these lines
        stocksFlexTable.setText(0, 0, "Symbol");
        stocksFlexTable.setText(0, 1, "Price");
        stocksFlexTable.setText(0, 2, "Change");
        stocksFlexTable.setText(0, 3, "Remove");
        mainWindow.add(stocksFlexTable);

        addPanel = new HorizontalPanel();
        rootPanel.add(addPanel, 10, 200);
        addPanel.setSize("267px", "68px");

        newSymbolTextBox = new TextBox();
        newSymbolTextBox.addKeyPressHandler(new KeyPressHandler() {
            public void onKeyPress(KeyPressEvent event) {
                if (event.getCharCode() == KeyCodes.KEY_ENTER){
                    addStock();
                }
            }
        });


        addPanel.add(newSymbolTextBox);
        newSymbolTextBox.setWidth("211px");

        addButton = new Button("Add");
        addButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                addStock();
            }
        });


        addPanel.add(addButton);

        lastUpdatedLabel = new Label("New Label");
        rootPanel.add(lastUpdatedLabel, 48, 274);



    }

    private void addStock() {
        final String symbol = newSymbolTextBox.getText().toUpperCase().trim();
        newSymbolTextBox.setFocus(true);

        // Stock code must be between 1 and 10 chars that are numbers, letters, or dots.
        if (!symbol.matches("^[0-9A-Z\\.]{1,10}$")) {
          Window.alert("'" + symbol + "' is not a valid symbol.");
          newSymbolTextBox.selectAll();
          return;
        }

        newSymbolTextBox.setText("");

     // don't add the stock if it's already in the watch list
        if (stocks.contains(symbol))
            return;

        // add the stock to the list
        int row = stocksFlexTable.getRowCount();
        stocks.add(symbol);
        stocksFlexTable.setText(row, 0, symbol);

        // add button to remove this stock from the list
        Button removeStock = new Button("x");
        removeStock.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {                 
            int removedIndex = stocks.indexOf(symbol);
            stocks.remove(removedIndex);
            stocksFlexTable.removeRow(removedIndex + 1);
        }
        });
        stocksFlexTable.setWidget(row, 3, removeStock);
    }
}

Когда я запускаю веб-приложение, я не могу добавить акцию. Программа, однако, делает различие между плохими названиями акций и приемлемыми. Вместо этого я получаю ошибку «uncaught исключения escape», и программа ничего не делает. Как мне устранить это?

1 Ответ

0 голосов
/ 06 марта 2012

Используйте отладчик и пошагово пройдитесь по коду. Установите точку останова в первой строке addStock и найдите, какая из строк дает сбой. После того, как вы найдете, какую линию вы затем применяете к линии, чтобы выяснить, какой аспект вызывает проблему - при условии, что вы не можете вывести проблему, посмотрев на линию.

...