首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个关于界面交互中死循环的有关问题~多谢各位~着的~

2013-04-20 
一个关于界面交互中死循环的问题~·谢谢各位~·在线等着的~·最近在做一个数据结构的课程设计遇上些麻烦,其中

一个关于界面交互中死循环的问题~·谢谢各位~·在线等着的~·
最近在做一个数据结构的课程设计遇上些麻烦,其中有个问题想了好几天还是没头绪的,于是只能上网求助各位了。。。由于明儿要第一次演示程序的,而我又刚好在最后的一个坎给卡主了,所以希望大家能帮助我,我在线等的。。。下面是我为了说明问题写的一个简易的小程序例子:
 

import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 
import javax.swing.*;
 public class test03 extends JFrame implements ActionListener{
 
/**
  * @param args
  */
 JPanel p1;
 JLabel jlb;
 JButton jb1;

 public static void main(String[] args) {
 // TODO Auto-generated method stub
 test03 test03 = new test03 ();


 }
 
public test03(){

 p1=new JPanel();
 p1.setBackground(Color.black);
 //p1.setLayout(new BorderLayout());


 jb1=new JButton("新建一个窗口");
jb1.addActionListener(this);
 p1.add(jb1);

 this.add(p1);
 
this.setSize(615, 473);
 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 this.setVisible(true);
 }
 
@Override
 public void actionPerformed(ActionEvent arg0) {
 // TODO Auto-generated method stub
 test04 test04 = new test04 ();
 }
 }
 


 class test04 extends JFrame implements ActionListener{
  JPanel p11;
 JLabel jlb1;
 JButton jb11;

 Boolean []bool=new Boolean[11];
 int cc=0;
int count=0;
 public test04(){
 for(int i=0;i<11;i++){
 bool[i]=true;
 }
 
p11=new JPanel();
 p11.setBackground(Color.black);



 jb11=new JButton("画图");
jb11.addActionListener(this);
 p11.add(jb11);

 this.add(p11);

 this.setSize(615, 473);
 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 this.setVisible(true);
 }


  public void paint(Graphics g) {
        super.paint(g);
      
     g.setColor(Color.green);
      
     while( bool[cc] ){
    try {
 Thread.sleep(2000);
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
      }
cc++;
      g.fillOval(10, 10, 10, 10);
                        while( bool[cc] ){
    try {
 Thread.sleep(2000);
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
      }
 cc++;
     g.fillOval(91, 105, 10, 10);
                         while( bool[cc] ){


    try {
 Thread.sleep(2000);
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
      }
 cc++;
     g.fillOval(119, 260, 10, 10);
                         while( bool[cc] ){
    try {
 Thread.sleep(2000);
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
      }
 cc++;
                      g.fillOval(243, 266, 10, 10);
      g.fillOval(210, 157, 10, 10);
      g.fillOval(332, 142, 10, 10);
      
     while( bool[cc] ){
    try {
 Thread.sleep(2000);
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
      }
 cc++;
     g.drawLine(10, 10,91, 105);
                         while( bool[cc] ){
    try {
 Thread.sleep(2000);
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
      }
 cc++;
     g.drawLine(91, 105,119, 260);
      g.drawLine(119, 260,243, 266);
      g.drawLine(243, 266,210, 157);
      g.drawLine(210, 157,332, 142);
      
     
     
 }
 @Override

 public void actionPerformed(ActionEvent arg0) {
 // TODO Auto-generated method stub
 
 bool[count] = false;
count++;
 }
 

 }
 
这个例子程序中一旦打开第二个界面后就出现死循环了,导致其他按钮失效了,有没有办法是是按钮不失效的,如果按钮能继续工作,就可以分步控制画线和点了(这里单步控制画线只是单纯为了说明问题的) 
[解决办法]

引用:
引用:等高人回答,帮你看了那么多代码,居然浪费了表情。
抱歉的~·抱歉的·
 您的提醒才让我发现自己太粗心了~·
 真的要谢谢您抽空帮我的~·
 
我想表达的是在第二个界面中,每按下一次按钮就画一次点或线,实现单步效果,按钮每被点击一次就改变bool[cc]的布尔值,然后跳出死循环。。。然而运行结果却是打开第二个界面后直……

=====================================
在另一个里面我已经回复你了,GUI界面是单线程的,如果你不让操作退出来是做不了第二次操作的。
当做完一次操作,不要停在while(true)里面了。虽然你用的是变量,改变不了变量还是一个死循环。
操作了一步后,ruturn返回,记录第一步已经做了,当按钮再发送一次时,再执行下一步。

热点排行