0

リスナーを優先できないかと考えていました。

ソケットと通信するプログラムでシステムトレイを作成しています。

ソケットの接続を待機する ServerSocket.accept() メソッドを呼び出すとすぐに、ソケットが受け入れられるまでシステム トレイがリッスンを停止します。

これを解決する方法はありますか?

システムトレイには、デバッグのオン/オフやプログラムの終了などのオプションがあるため、プログラムと通信する必要があり、リッスンにおいても最優先されます。

事前にサンクス!

編集:ここにいくつかのコードがあります。

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;
    }

お役に立てれば。

4

1 に答える 1

0

一度に複数のことをしたい場合は、スレッドを使用してください。

あなたの場合、キャッシュされたスレッドプール、つまり Executors.newCachedThreadPool() があり、最初に接続を受け入れるタスクがあり、各接続を読み取るタスクもあります(したがって、接続を処理するときにより多くの接続を受け入れることができます)

于 2012-05-02T08:09:38.630 に答える