为ActionListener提供优先级?

时间:2012-05-02 08:06:19

标签: java sockets system-tray

我想知道是否有可能给听众带来骚动。

我正在一个与套接字通信的程序上创建一个系统托盘。

一旦我调用ServerSocket.accept()方法,它将等待套接字连接, 我的系统托盘停止侦听,直到接受套接字。

有什么方法可以解决这个问题吗?

systemtray具有调试开/关和关闭程序等选项,因此它必须与程序通信,并且在侦听时也具有最高优先级。

提前Thanx!

编辑: 这是一些代码。

public class Start {

/**
 * Main method.
 *
 * @param args Arguments given in the commandline.
 */
public static void main(String[] args) {
    if (args.length > 0) {
        if (args[0].equals("-v")) {
            Debugger.setDebug(true);
            Debugger.showMessage("DEBUG: ON");
        }
    } else {
        System.out.println("DEBUG: OFF");
        Debugger.setDebug(false);
    }

    if (SystemTrayCreator.canRead()) {
        SystemTrayCreator stc = new SystemTrayCreator();
        new Thread(stc).start();
    }
    Connector c = new Connector();
    new Thread(c).start();

}
}

public class Connector implements Runnable{


/** Creates a Connector-object.
 * 
 */
public Connector(){
}
static Timer t = new Timer(100, new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent e) {
        doJob();
        t.stop();
    }
});

/** Activates the connector.
 * 
 */
@Override
public void run() {
    while (true) {
        t.start();
    }
}

public class SystemTrayCreator implements Runnable{


/**
 * Creates a systemtray with an icon.
 *
 */
@Override
public void run() {
    //Check whether the SystemTray is supported
    if (!SystemTray.isSupported()) {
        Debugger.showMessage("SystemTray is not supported");
        return;
    }

希望这有帮助。

1 个答案:

答案 0 :(得分:0)

如果您想一次做多件事,请使用线程。

在你的情况下,我会有一个缓存的线程池,即Executors.newCachedThreadPool(),它首先有一个接受连接的任务,还有一个任务来读取每个连接(所以你可以在处理连接时接受更多的连接)< / p>