import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.lang.*;
/**
 *
 * @author Administrator
 */
public class nousexc  extends JFrame{
    JPanel jp1=new JPanel();
    JPanel jp2=new JPanel();
    javax.swing.JSplitPane jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,false,jp1,jp2);
    JLabel jl1=new JLabel("999999");
    JButton jb1=new JButton("面板1递减");
    
    JButton jb2=new JButton("面板2递增");
    JLabel jl2=new JLabel("0");
    /** Creates a new instance of nousexc */
    public nousexc() {
         setSize(800,600);
        add(jsp);
        jp1.add(jl1);
        jp1.add(jb1);
        jl1.setOpaque(true);
        jl1.setBackground(Color.red);
        jb1.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                try
                {
                    while(java.lang.Integer.parseInt(jl1.getText())>0)
                    {
                        int changeint=Integer.parseInt(jl1.getText())-1;
                        jl1.setText(changeint+"");
                        jl1.repaint();
                        Thread t=new Thread();
                        t.sleep(1);//这样写代码后,按下按钮,介面锁死了,为何呢?
                    }
                 }
                catch(Exception ex)
                {
                    ex.printStackTrace();
                }
            }
            
        });
    }
    
    public static void main(String[] args)
    {
        nousexc nxc=new nousexc();
        nxc.setVisible(true);
    }
    
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【III_dont_know】截止到2008-07-17 11:19:23的历史汇总数据(不包括此帖):
    发帖的总数量:24                       发帖的总分数:590                      每贴平均分数:24                       
    回帖的总数量:19                       得分贴总数量:2                        回帖的得分率:10%                      
    结贴的总数量:21                       结贴的总分数:520                      
    无满意结贴数:2                        无满意结贴分:50                       
    未结的帖子数:3                        未结的总分数:70                       
    结贴的百分比:87.50 %               结分的百分比:88.14 %                  
    无满意结贴率:9.52  %               无满意结分率:9.62  %                  
    楼主加油
      

  2.   

    不需要new Thread()吧,
    用this.wait(1)试一下。
      

  3.   

    this.wait(1);
    需要点一下,减一下
    同时还要报错
    java.lang.IllegalMonitorStateException: current thread not owner
            at java.lang.Object.wait(Native Method)
            at menu.nousexc$1.actionPerformed(nousexc.java:48)
            at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
            at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
            at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
            at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
            at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
            at java.awt.Component.processMouseEvent(Component.java:5488)
            at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
            at java.awt.Component.processEvent(Component.java:5253)
            at java.awt.Container.processEvent(Container.java:1966)
            at java.awt.Component.dispatchEventImpl(Component.java:3955)
            at java.awt.Container.dispatchEventImpl(Container.java:2024)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
            at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
            at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
            at java.awt.Container.dispatchEventImpl(Container.java:2010)
            at java.awt.Window.dispatchEventImpl(Window.java:1766)
            at java.awt.Component.dispatchEvent(Component.java:3803)
            at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
            at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
            at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
            at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
            at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
      

  4.   

    看我给你加的注释和重写的代码
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JSplitPane;/**
     * @author Administrator
     */
    public class nousexc extends JFrame
    {
        JPanel jp1 = new JPanel();    JPanel jp2 = new JPanel();    javax.swing.JSplitPane jsp = new JSplitPane(JSplitPane.VERTICAL_SPLIT, false, jp1, jp2);    JLabel jl1 = new JLabel("999999");    JButton jb1 = new JButton("面板1递减");    JButton jb2 = new JButton("面板2递增");    JLabel jl2 = new JLabel("0");    /** Creates a new instance of nousexc */
        public nousexc()
        {
            setSize(800, 600);
            add(jsp);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jp1.add(jl1);
            jp1.add(jb1);
            jl1.setOpaque(true);
            jl1.setBackground(Color.red);
            
            
            jb1.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    try
                    {
    //                    while(java.lang.Integer.parseInt(jl1.getText()) > 0)
    //                    {
    //                        int changeint = Integer.parseInt(jl1.getText()) - 1;
    //                        jl1.setText(changeint + "");
    //                        jl1.repaint();
    //                        // 上面三行代码根本就没有在新线程里面,你用了个死循环,主线程一直在跑这个,界面当然死掉
    //
    //                        // 你这个线程在这里没有任何意义,建议你再好好看看书
    //                        Thread t = new Thread();
    //                        // 这个是静态方法,在这里sleep的是主线程,而不是t
    //                        t.sleep(1);// 这样写代码后,按下按钮,介面锁死了,为何呢?
    //                    }                    Thread t = new Thread()
                        {
                            public void run()
                            {
                                while(java.lang.Integer.parseInt(jl1.getText()) > 0)
                                {
                                    int changeint = Integer.parseInt(jl1.getText()) - 1;
                                    jl1.setText(changeint + "");
                                    jl1.repaint();                                try
                                    {
                                        sleep(1);
                                    }
                                    catch(InterruptedException e)
                                    {
                                        e.printStackTrace();
                                    }
                                }
                            }
                        };                    t.start();                }
                    catch(Exception ex)
                    {
                        ex.printStackTrace();
                    }
                }        });
        }    public static void main(String[] args)
        {
            nousexc nxc = new nousexc();
            nxc.setVisible(true);
        }
    }
      

  5.   

    Thread t = new Thread()
                        {
                            public void run()
                            {
                              ...
                              ...
                            
                        };
    请问,红色部分是一个什么写法呀???
    Thread t=new Thread();已经实例化了Thread类,后边还可以去写它的方法吗?
      

  6.   

    这个问题我也遇到过,我现在加了一个群,这个群人气较好,也的确有高手,不但可以交流问题,而且还可以接项目赚钱,QQ群号是:陆$肆$柒$玖$捌&柒&伍&伍,不要说我做广告,看看便知,如需要的话加入试试,如果你发现好的交流群也别忘了告诉我啊!呵呵!
      

  7.   


    匿名内部类好好看一下书吧,Thread t=new Thread();虽然实例化了一个Thread对象,但是没有重写里面的run()方法,所以这个线程什么也干不了。
    还要要启动线程,必须调用其start()方法,否则线程也不发挥任何作用。
      

  8.   

    如果想start 线程,你得实现Runable接口
    或者继承Thread 类
    楼主的写法是什么也做不了的
      

  9.   

        while(java.lang.Integer.parseInt(jl1.getText()) > 0)
         int changeint = Integer.parseInt(jl1.getText()) - 1;
    看上边这句话就是死循环 jl1.getText()一直是大于0的
    另外你线程用法也有问题。