0

私はjframeとjtextpaneを持っています、ユーザーがjframeを閉じるまでPCでポートをチェックするメソッドを実行したい、windowlistnerを使用して試していますが、メソッドは1回だけ実行し、ユーザーがアプリケーションを閉じるまで実行したい

frame = new JFrame();

        frame.setResizable(false);
        frame.setBounds(100, 100, 552, 444);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        frame.addWindowListener(new WindowListener() {

            @Override
            public void windowOpened(WindowEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowIconified(WindowEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowDeiconified(WindowEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowDeactivated(WindowEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowClosing(WindowEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowClosed(WindowEvent arg0) {
                // TODO Auto-generated method stub

            }

            @Override
            public void windowActivated(WindowEvent arg0) {
                checkport(); // this run at first time only!

            }
        });
4

1 に答える 1

1

フレームの表示中に開始されるポートを確認するには、別のスレッドを使用する必要があります。windowClosingイベントで、スレッドを停止します。

サンプルコード:

    frame = new JFrame();
    frame.setResizable(false);
    frame.setBounds(100, 100, 552, 444);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);
    final CheckPort checkPort = new CheckPort();
    final Thread thread = new Thread( checkPort );
    thread.start();
    frame.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing( WindowEvent e ) {
            checkPort.stop();
            thread.interrupt();
        }
    });

ポートをチェックするために実行可能。

    public class CheckPort implements Runnable {
        private boolean checkPort = true;

        public void run() {
            while( checkPort ) {
                checkPort();
                try {
                    Thread.sleep( 100 );
                } catch( InterruptedException ex ) {
                }
            }
        }

        public void checkPort() {
            // do check port here
        }

        public void stop() {
            checkPort = false;
        }
    }
于 2013-02-20T14:40:23.797 に答える