Java Jframe中的后台操作
我有一个jframe和jtextpane,我想运行一个在pc中检查端口的方法,直到用户关闭jframe,我尝试使用windowlistner,但该方法只运行一次,我希望它运行到用户关闭应用程序Java Jframe中的后台操作,java,swing,Java,Swing,我有一个jframe和jtextpane,我想运行一个在pc中检查端口的方法,直到用户关闭jframe,我尝试使用windowlistner,但该方法只运行一次,我希望它运行到用户关闭应用程序 frame = new JFrame(); frame.setResizable(false); frame.setBounds(100, 100, 552, 444); frame.setDefaultCloseOperation(JFrame.EXIT
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!
}
});
您应该使用单独的线程来检查显示帧时启动的端口。在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;
}
}
签出框架..您需要确保在事件调度线程之外执行checkport
,否则您的UI将“冻结”。frame.getContentPane().setLayout(null)代码>-->停止使用那个坏习惯。荡秋千的人在哪里?在框架关闭之前你是什么意思?当框架变为活动状态时(即,当用户聚焦窗口时),调用windowActivated。1)要更快地获得更好的帮助,请发布一条消息。2) 在适当的地方使用大写字母(句首、单词I、类名,如JFrame
)。读这本书就像是试图听一个喃喃自语的人说话。我有更好的事情要做。