2

これが私のコードです:

package com.eggproject_hu.WPECommerceAdminSales.client;

import java.lang.Boolean;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;

public class AblakVillogo
{
    public static Boolean focusedWindow = true;
    private static Boolean init = false;

    public static void setFocused(Boolean focus)
    {
        focusedWindow = focus;
    }

    public static Boolean getFocused()
    {
        return focusedWindow;
    }

    public static void focusVizsgalat()
    {
        if(focusedWindow == true)
        {
            GWT.log("igen");
        }
        else
        {
            GWT.log("nem");
        }
    }

    public static void init()
    {
        if(init == false)
        {
            _init();
        }
    }

    private native static void _init() /*-{
        $wnd.jQuery(document).ready(function()
        {
            $wnd.jQuery($wnd).focus(function()
            {
@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::focusVizsgalat()();               @com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(true);
                $wnd.console.log("focus");
            }).blur(function()
            {
                var ret = false;
                @com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::focusVizsgalat()();
                                @com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(false);
                $wnd.console.log("blur");
            });
        });
    }-*/;
}

ブラウザ コンソールに次のように表示されます。

キャッチされない例外: java.lang.IllegalArgumentException: 呼び出し引数: ブール型の JS 値、期待される java.lang.Boolean

Chrome と Firefox でテストしました。

何が問題ですか?

助けてくれてありがとう!

4

2 に答える 2

6

javascriptから値を設定するには、ブール値をプリミティブブール値として宣言する必要があります

呼び出しで L/java/lang/Boolean を指定する必要はありませんが、代わりに Z

于 2011-06-06T20:22:47.517 に答える
4

booleanダニエルのアドバイスに従いますが、引数を取るようにメソッドを変更する(つまりboolean、ずっと使用する) か、JSNI メソッドの java.lang.Boolean でブール値を明示的にキャスト/ボックス化する必要があります。

@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(@java.lang.Boolean::valueOf(Z)(true));

Boolean…あなたの場合でも、値は定数であるため、定数TRUEとを直接使用したいと思いますFALSE:

@com.eggproject_hu.WPECommerceAdminSales.client.AblakVillogo::setFocused(Ljava/lang/Boolean;)(@java.lang.Boolean::TRUE);

そうは言っても、ダニエルのアドバイスがあなたにぴったりだと思います。

于 2011-06-07T10:02:04.723 に答える