проблема с использованием Smart GWT 3.0 с незначительными изменениями образца из витрины - PullRequest
0 голосов
/ 08 марта 2012

Я использую Smart GWT 3.0 - в частности, я работаю с образцом поворота, который использует класс рисования.

Я изменил нарисованный треугольник и вместо этого хочу показать изображение на его месте - я хочу этоизображение поворачивается так же, как другие фигуры поворачиваются, когда пользователь нажимает на ползунок (как показано на витрине)

В затмении после изменения кода и его сохранения не отображается ошибка.

Я изменил код в форме треугольника и заменил его следующим:

           DrawImage drawImg= new DrawImage();
           drawImg.setSrc("other/earth.png");
           drawImg.setDrawPane(drawPane);  
           drawImg.setLeft(100);
           drawImg.setHeight(100);
           drawImg.draw();

Однако при запуске режима GWT Dev и попытке увидеть страницу HTML появляется ошибка «Uncaught Exception».с чертежами.

Ниже приводится ошибка, которую я получаю в Google Chrome, когда приложение не запускается -

onModuleLoad() threw an exception
Exception while loading module com.arvindikchari.bspinner.client.Spinner. See Development Mode for details.

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396)
at     
com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
at 

     com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
at java.lang.Thread.run(Unknown Source)
Caused by: com.google.gwt.core.client.JavaScriptException: (TypeError): Cannot call method 'create' of undefined
at     
  com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:248)
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.smartgwt.client.widgets.drawing.DrawPane.create(DrawPane.java)
at com.smartgwt.client.widgets.BaseWidget.getOrCreateJsObj(BaseWidget.java:361)
at com.smartgwt.client.widgets.layout.Layout.addMember(Layout.java:1153)
at com.arvindikchari.bspinner.client.Spinner.onModuleLoad(Spinner.java:244)
... 9 more

ОБНОВЛЕНИЕ -

Ошибка в строке244 onModuleLoad - код в этой строке приведен ниже -

layout.addMember(drawPane);

Ошибка возникает из-за кода onModuleLoad - весь код для этого теперь приведен ниже -

 public void onModuleLoad() {  
        drawPane = new DrawPane();  
        drawPane.setHeight(450);  
        drawPane.setWidth(700);  
        drawPane.setLeft(25);  
        drawPane.setShowEdges(true);  
        drawPane.setEdgeSize(4);  
        drawPane.setBackgroundColor("papayawhip");  
        drawPane.setOverflow(Overflow.HIDDEN);  
        drawPane.setCursor(Cursor.AUTO);  

        drawPane.addDrawHandler(new DrawHandler() {  

        @Override  
        public void onDraw(DrawEvent event) {  

            DrawPane drawPane = (DrawPane) event.getSource();  

            DrawLabel imglabel= new DrawLabel();


           DrawImage drawImg= new DrawImage();
           drawImg.setSrc("other/earth.png");
           drawImg.setDrawPane(drawPane);  
           drawImg.setLeft(100);
           drawImg.setHeight(100);
           drawImg.draw();


            DrawLabel curveLabel = new DrawLabel();  
            curveLabel.setDrawPane(drawPane);  
            curveLabel.setLeft(200);  
            curveLabel.setTop(175);  
            curveLabel.setContents("Curve");  
            curveLabel.draw();  

            DrawCurve drawCurve = new DrawCurve();  
            drawCurve.setDrawPane(drawPane);  
            drawCurve.setStartPoint(new Point(200,50));  
            drawCurve.setEndPoint(new Point(300,150));  
            drawCurve.setControlPoint1(new Point(250,0));  
            drawCurve.setControlPoint2(new Point(250,200));  
            drawCurve.draw();  

            DrawLabel linePathLabel = new DrawLabel();  
            linePathLabel.setDrawPane(drawPane);  
            linePathLabel.setLeft(350);  
            linePathLabel.setTop(175);  
            linePathLabel.setContents("Line Path");  
            linePathLabel.draw();  

            DrawLinePath drawLinePath = new DrawLinePath();  
            drawLinePath.setDrawPane(drawPane);  
            drawLinePath.setStartPoint(new Point(350,50));  
            drawLinePath.setEndPoint(new Point(450,150));  
            drawLinePath.draw();  

            DrawLabel pathLabel = new DrawLabel();  
            pathLabel.setDrawPane(drawPane);  
            pathLabel.setLeft(500);  
            pathLabel.setTop(175);  
            pathLabel.setContents("Path");  
            pathLabel.draw();  

            DrawPath drawPath = new DrawPath();  
            drawPath.setDrawPane(drawPane);  
            drawPath.setPoints(  
                    new Point(500,50),  
                    new Point(525,50),  
                    new Point(550,75),  
                    new Point(575,75),  
                    new Point(600,75),  
                    new Point(600,125),  
                    new Point(575,125),  
                    new Point(550,125),  
                    new Point(525,150),  
                    new Point(500,150)  
            );  
            drawPath.draw();  

            DrawLabel ovalLabel = new DrawLabel();  
            ovalLabel.setDrawPane(drawPane);  
            ovalLabel.setLeft(50);  
            ovalLabel.setTop(415);  
            ovalLabel.setContents("Oval");  
            ovalLabel.draw();  

            DrawOval drawOval = new DrawOval();  
            drawOval.setDrawPane(drawPane);  
            drawOval.setLeft(50);  
            drawOval.setTop(300);  
            drawOval.setWidth(100);  
            drawOval.setHeight(100);  
            drawOval.draw();  

            DrawLabel rectLabel = new DrawLabel();  
            rectLabel.setDrawPane(drawPane);  
            rectLabel.setLeft(200);  
            rectLabel.setTop(415);  
            rectLabel.setContents("Rect");  
            rectLabel.draw();  

            DrawRect drawRect = new DrawRect();  
            drawRect.setDrawPane(drawPane);  
            drawRect.setLeft(200);  
            drawRect.setTop(300);  
            drawRect.setWidth(150);  
            drawRect.setHeight(100);  
            drawRect.draw();  

            DrawLabel lineLabel = new DrawLabel();  
            lineLabel.setDrawPane(drawPane);  
            lineLabel.setLeft(400);  
            lineLabel.setTop(415);  
            lineLabel.setContents("Line");  
            lineLabel.draw();  

            DrawLine drawLine = new DrawLine();  
            drawLine.setDrawPane(drawPane);  
            drawLine.setStartPoint(new Point(400,300));  
            drawLine.setEndPoint(new Point(500,400));  
            drawLine.draw();  

            DrawLabel sectorLabel = new DrawLabel();  
            sectorLabel.setDrawPane(drawPane);  
            sectorLabel.setLeft(550);  
            sectorLabel.setTop(415);  
            sectorLabel.setContents("Sector");  
            sectorLabel.draw();  

            DrawSector drawSector = new DrawSector();  
            drawSector.setDrawPane(drawPane);  
            drawSector.setCenterPoint(new Point(550,300));  
            drawSector.setStartAngle(0);  
            drawSector.setEndAngle(90);  
            drawSector.setRadius(100);  
            drawSector.draw();  

        }  
    });  

    ValueChangedHandler shapeRotationSliderValueChangeHandler = new      ValueChangedHandler() {  
        @Override  
        public void onValueChanged(ValueChangedEvent event) {  
            DrawItem[] drawItems = drawPane.getDrawItems();  
            for (int i = 0; i < drawItems.length; i++) {  
                DrawItem drawItem = drawItems[i];  
                if(drawItem instanceof DrawLabel){  
                    continue;  
                }  
                drawItem.rotateTo(event.getValue());  
            }  
            drawPane.redraw();  
        }  
    };  

    Slider shapesRotationSlider = new Slider();  
    shapesRotationSlider.setMinValue(0);  
    shapesRotationSlider.setMaxValue(360);  
    shapesRotationSlider.setNumValues(360);  
    shapesRotationSlider.setWidth(400);  
    shapesRotationSlider.setLeft(25);  
    shapesRotationSlider.setTop(450);  
    shapesRotationSlider.setValue(0);  
    shapesRotationSlider.setTitle("Rotate Shapes");  
    shapesRotationSlider.setVertical(false);  
    shapesRotationSlider.addValueChangedHandler(shapeRotationSliderValueChangeHandler);  
    shapesRotationSlider.draw();  

    VLayout layout = new VLayout();  
    layout.addMember(drawPane);  
    layout.addMember(shapesRotationSlider);  
    layout.draw();  


    layout.draw();  
}  

Ответы [ 2 ]

1 голос
/ 26 октября 2012

Первая проверка XML-файл GWT имеет следующие наследники над строкой «класс записи».

<inherits name="com.smartgwt.Drawing"/>;

также добавьте следующую строку в ваш Java-файл

import com.smartgwt.*;
1 голос
/ 08 марта 2012

Прежде всего UmbrellaException - это оболочка истинного исключения, показанного в строке ", вызванной "

Таким образом, ваше настоящее исключение:

Причина: com.google.gwt.core.client.JavaScriptException: (TypeError): невозможно вызвать метод 'create' из неопределенного

Если вы прокрутите его ниже, вы увидите, что ошибкавызывается при вызове onModuleLoad в вашем Spinner.java на линии 244 :

com.arvindikchari.bspinner.client.Spinner.onModuleLoad (Spinner.java:244)

Поэтому постарайтесь выяснить, что не так, если вы не можете это решить, то, пожалуйста, опубликуйте весь код метода onModuleLoad.

ОБНОВЛЕНИЕ:

У вас много проблем:

onValueChanged из shapeRotationSliderValueChangeHandler вызывается до того, как макет нарисован.Чтобы решить эту проблему, добавьте private boolean firstTime = true и в onValueChanged добавьте:

if (firstTime) {
    firstTime = false;
} else {
    DrawItem[] drawItems = drawPane.getDrawItems();  
    for (int i = 0; i < drawItems.length; i++) {  
        DrawItem drawItem = drawItems[i];  
        if(drawItem instanceof DrawLabel){  
            continue;  
        }  
        drawItem.rotateTo(event.getValue());  
    }  
    drawPane.redraw(); 
}

PS: Для других проблем, которые я не могу решить, пожалуйста, перепроверьте всюкод для вещей, похожих на приведенный выше.

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