java 如何停止一个死循环?
我的java应用程序(含最大化最小化关闭按钮)要求实时刷新读取最新数据,但是现在要关闭这个窗口,关闭后又显示了,我想要跳出这个死循环关闭窗口,应该如何实现?我的死循环代码...
我的java应用程序(含最大化最小化关闭按钮)要求实时刷新读取最新数据,但是现在要关闭这个窗口,关闭后又显示了,我想要跳出这个死循环关闭窗口,应该如何实现?我的死循环代码如下:
int readerDataTime=1000; //读取数据库时间间隔单位毫秒
javax.swing.Timer timer = new javax.swing.Timer(readerDataTime, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(isClose==0){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=ourMsg.mdb";//此为NO-DSN方式
Connection conn=DriverManager.getConnection(dburl);
Statement stmt=conn.createStatement();
int ii=0;
ResultSet rs;
rs=stmt.executeQuery("select TOP "+x_length+" * from T_sensordata where nodeid="+nodeID+" order by id desc ");
ii=0;
while(rs.next()){dataset.set(0,ii++,0,rs.getFloat(valueType));}
rs.close();
stmt.close();
conn.close();
}catch(Exception ee){}
}else
{
break;
}
chart2D.addDataset (dataset);
if(chartType==1){
panes.addTab ("温度变化", chart2D);
}else if(chartType==2)
{
panes.addTab("压力变化",chart2D);
}else if(chartType==3)
{
panes.addTab("湿度变化",chart2D);
}else{
panes.addTab("温度变化",chart2D);
}
frame.show();
}//actionPerformed
}); 展开
int readerDataTime=1000; //读取数据库时间间隔单位毫秒
javax.swing.Timer timer = new javax.swing.Timer(readerDataTime, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(isClose==0){
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl ="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=ourMsg.mdb";//此为NO-DSN方式
Connection conn=DriverManager.getConnection(dburl);
Statement stmt=conn.createStatement();
int ii=0;
ResultSet rs;
rs=stmt.executeQuery("select TOP "+x_length+" * from T_sensordata where nodeid="+nodeID+" order by id desc ");
ii=0;
while(rs.next()){dataset.set(0,ii++,0,rs.getFloat(valueType));}
rs.close();
stmt.close();
conn.close();
}catch(Exception ee){}
}else
{
break;
}
chart2D.addDataset (dataset);
if(chartType==1){
panes.addTab ("温度变化", chart2D);
}else if(chartType==2)
{
panes.addTab("压力变化",chart2D);
}else if(chartType==3)
{
panes.addTab("湿度变化",chart2D);
}else{
panes.addTab("温度变化",chart2D);
}
frame.show();
}//actionPerformed
}); 展开
展开全部
java跳出循环的方法
break; 可以跳出当前循环
continue; 结束本次循环开始下一次循环
如果你说的是强制结束死循环的进程的话 CTRL+ALT+DEL调出任务管理器 结束java进程即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的TIMER是另外一个线程在运行,所以你关闭了窗口但是这个独立的线程在运行。
方法就是在你关闭窗体时调用timer的stop() 方法。或者在循环体内设置停止条件,看你的代码是怎么写的。
方法就是在你关闭窗体时调用timer的stop() 方法。或者在循环体内设置停止条件,看你的代码是怎么写的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以设置成员变量初始化为true比如boolean BK=true;
然后窗口关闭监听器中写入BK=false;
最后在死循环里写 if(BK==false)break;
然后窗口关闭监听器中写入BK=false;
最后在死循环里写 if(BK==false)break;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
明显你的frame.show()就不应该放在actionPerformed里面,窗口只要显示一次就可以了。另外,我怀疑你是否设置,关闭窗口的动作是退出程序。你用的Frame,建议用JFrame,对Frame进行拓展的了,Frame的很多方法过时了。
看看下面这个简化的例子:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.Timer;
public class test {
static int n=0;
static Random rd = new Random();
public static void main(String[] args) {
final JFrame frm = new JFrame( );
frm.setSize(300,400);
//设置 关闭窗口时动作 为 退出
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置标题 通过变量 n 测试是否成功刷新
frm.setTitle("标题-"+n++);
//显示窗口
frm.setVisible(true);
Timer t = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frm.setTitle("标题-"+n++);
//窗口大小也改变 随机
frm.setSize(rd.nextInt(500),rd.nextInt(600));
}
});
t.start(); //开始 刷新
}
}
看看下面这个简化的例子:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.Timer;
public class test {
static int n=0;
static Random rd = new Random();
public static void main(String[] args) {
final JFrame frm = new JFrame( );
frm.setSize(300,400);
//设置 关闭窗口时动作 为 退出
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置标题 通过变量 n 测试是否成功刷新
frm.setTitle("标题-"+n++);
//显示窗口
frm.setVisible(true);
Timer t = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frm.setTitle("标题-"+n++);
//窗口大小也改变 随机
frm.setSize(rd.nextInt(500),rd.nextInt(600));
}
});
t.start(); //开始 刷新
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询