Script 1.8.1

setListener

原型:

setListener(callback)

描述:

添加监听函数

参数:

callback: 监听该消息的回调函数

返回值:

示例:
var {JFrame, JLabel, SwingConstants} = javax.swing;
var {Toolkit, Dimension, Color} = java.awt
var timeoutID = null;
var settings = {
    'com.tencent.mm':
    {bg: Color.CYAN},
    'com.whatsapp':
    {bg: Color.BLUE},
}

(function () {
    var executor = new java.util.concurrent.Executors.newScheduledThreadPool(1);
    var counter = 1;
    var ids = {};

    setTimeout = function (fn,delay) {
        var id = counter++;
        var runnable = new JavaAdapter(java.lang.Runnable, {run: fn});
        ids[id] = executor.schedule(runnable, delay,
                java.util.concurrent.TimeUnit.MILLISECONDS);
        return id;
    }

    clearTimeout = function (id) {
        ids[id].cancel(false);
        executor.purge();
        delete ids[id];
    }

    setInterval = function (fn,delay) {
        var id = counter++;
        var runnable = new JavaAdapter(java.lang.Runnable, {run: fn});
        ids[id] = executor.scheduleAtFixedRate(runnable, delay, delay,
                        java.util.concurrent.TimeUnit.MILLISECONDS);
        return id;
    }

    clearInterval = clearTimeout;
})()

function createFrame() {
    var frame = new JFrame();
    frame.setSize(200, 100);
    frame.setResizable(false);
    frame.setUndecorated(true);
    frame.setAlwaysOnTop (true);
    frame.getContentPane().setBackground(Color.GREEN);
    frame.setFocusableWindowState(false);
    var kit = Toolkit.getDefaultToolkit();
    var screenSize = kit.getScreenSize();
    frame.setLocation(screenSize.width/2 - frame.getWidth()/2,
                    screenSize.height/2- frame.getHeight()/2);
    var label = new JLabel("", SwingConstants.CENTER);
    frame.add(label);
    return {frame:frame, label:label};
}

function deleteFrame(f) {
    // print('Timeout called');
    f.dispose();
    if (timeoutID) {
            clearTimeout(timeoutID);
            timeoutID = 0;
    }
}

function customize(fl, app) {
    var color = null;
    if (settings[app]) {
            color = settings[app].bg;
    }
    if (color) {
            fl.frame.getContentPane().setBackground(color);
    }
}

function showMessage(dev, app, msg) {
    //print("Device = " + dev.getName() + ", App = " + app + ", Text = " + msg);
    var str = "<html>Device: " + dev.getName() + "<br>App: " + app + "<br>Text: "+msg+"</html>";
    var fl = createFrame();
    customize(fl, app);
    fl.label.setText(str);
    fl.frame.setVisible(true);
    timeoutID = setTimeout(function(){deleteFrame(fl.frame)}, 3000);
}

var notify = new Notification(sigmaConst.Any, sigmaConst.Any, sigmaConst.Any);
sync(showMessage, notify);
notify.setListener(showMessage);