0

初めて Dart を試していますが、エラー処理がうまくいきません。ここにそれに関するいくつかの情報があります。

資力:

どのように私はそれをしたい:

画像ソースが 403 エラー コードを返した場合、MinecraftSkin のインスタンスを作成すると StateError がスローされます。例外は、MineCraft スキンのインスタンスを作成しようとする generateHead() 関数で処理する必要があります。

それはどうですか:

MineCraft プレーヤーのスキンを表す画像が存在しない場合 (画像ソースが存在せず、403 が返される場合)、コードは 22 行目 (onError; StateError をスローする場所) で停止し、コンソールに「Breaking on exception: Bad」を出力します。状態: ユーザーにはスキンがありません".

ただし、generateHead の catch では、何も実行されません。プロンプトを表示しても StateError メッセージは出力されず、DOM で選択された要素に StateError メッセージが挿入されません。

コード

import 'dart:html';

class MinecraftSkin {
    String user;
    CanvasElement ce = new CanvasElement();

    void _generateCanvas(Event e) {
        CanvasRenderingContext2D ctx = ce.getContext('2d');
        ctx.imageSmoothingEnabled = false;
        ctx.drawImageScaledFromSource((e.target as ImageElement),8,8,8,8,0,0,ce.width,ce.height);
    }

    CanvasImageSource getHead() => ce;
    String name() => user;

    MinecraftSkin(String minecraftUser, num size) {
        user = (minecraftUser == null) ? 'Notch' : minecraftUser;
        ce.width = size;
        ce.height = size;
        ImageElement img = new ImageElement()
            ..onLoad.listen(_generateCanvas)
            ..onError.listen((_) => throw new StateError('User has no skin'));
        img.src = "http://s3.amazonaws.com/MinecraftSkins/"+user+".png";
    }
}

void generateHead(Event e) {
    MinecraftSkin ms;
    try {
        ms = new MinecraftSkin((querySelector('#userName') as InputElement).value, 128);
    } on StateError catch(se) {
        print(se.message);
        querySelector('#status').text = se.message;
    }
    CanvasElement cems = ms.getHead();
    cems.id = "mc" + ms.name();
    cems.title = "mc" + ms.name();
    document.body.append(cems);
    querySelector('#status').text = "Got head!";
}

void main() {
    querySelector('#generateHead').onClick.listen(generateHead);
}

前もって感謝します!

敬具、ジェレミー

4

1 に答える 1