Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 计时器事件在更改JPanel之前运行_Java_Swing_Debugging_Timer_Jpanel - Fatal编程技术网

Java 计时器事件在更改JPanel之前运行

Java 计时器事件在更改JPanel之前运行,java,swing,debugging,timer,jpanel,Java,Swing,Debugging,Timer,Jpanel,我有一个JFrame,其中包含一个带有JButton“Press Me”的JPanel 按下“Press me”(按我)按钮将在同一JFrame内切换到另一个JPanel(第二面板) 我面临的问题是,在第二个面板出现之前,当我按下“press Me”(按我)按钮时,会有10秒的延迟 此10秒延迟是由计时器事件引起的 我希望第二个面板在计时器事件开始之前出现 现在发生的是计时器事件开始,我在“按下我”按钮等待10秒钟,然后第二个面板出现 有人能帮我解决这个问题吗 谢谢 用于运行项目的主类 pa

我有一个JFrame,其中包含一个带有JButton“Press Me”的JPanel

按下“Press me”(按我)按钮将在同一JFrame内切换到另一个JPanel(第二面板)

我面临的问题是,在第二个面板出现之前,当我按下“press Me”(按我)按钮时,会有10秒的延迟

此10秒延迟是由计时器事件引起的

我希望第二个面板在计时器事件开始之前出现

现在发生的是计时器事件开始,我在“按下我”按钮等待10秒钟,然后第二个面板出现

有人能帮我解决这个问题吗

谢谢

用于运行项目的主类

package testing;

import java.io.*;
import java.security.*;
import javax.xml.bind.DatatypeConverter;
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;


public class Testing extends JPanel 
{



    public static void main(String[] args) 
    {
        frame = new JFrame();
        LoginPanel lp = new LoginPanel();
        frame.add(lp);
        frame.pack();
        frame.validate();
        frame.setVisible(true);

    }

   static JFrame frame;
}
登录面板类

import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class LoginPanel extends JPanel
{
    LoginPanel()
    {
        Loginbtn = new JButton("Press Me");
        Loginbtn.addActionListener(new LoginButtonListener());
        add(Loginbtn);


    }

     private class LoginButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {

            SecondPanel sp = new SecondPanel();
            Utility.ChangePanel(sp);
            sp.run();
        }
    }

    JButton Loginbtn;

}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;


public class SecondPanel extends JPanel
{
    SecondPanel()
    {
        setLayout(new GridLayout(2,2));

        //set deck image
        File deckfile = new File("./src/testing/Ace_Club_1_1.png"); //deck image file location

        try
        {    
          Deckimg = ImageIO.read(deckfile); //read deck image


        }

        catch (IOException e)
        {

        }

         Image scaledInstance = Deckimg.getScaledInstance(100, -1, Image.SCALE_SMOOTH);
         DeckLabel = new JLabel(new ImageIcon(scaledInstance));
         add(DeckLabel);

    }

    public void run()
    {
        Timer timer = new Timer(5000, new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {
                // Code to be executed
                System.out.println("HowareYou");

            }
        });
        timer.setRepeats(false); // Only execute once
        timer.start(); // Go go go!

        try
        {
             Thread.sleep(7000);
        }



        catch(InterruptedException ie)
        {

        }

    }

    JLabel DeckLabel;
    JPanel DeckPanel;
    BufferedImage Deckimg;

}
第二面板类

import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class LoginPanel extends JPanel
{
    LoginPanel()
    {
        Loginbtn = new JButton("Press Me");
        Loginbtn.addActionListener(new LoginButtonListener());
        add(Loginbtn);


    }

     private class LoginButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent event)
        {

            SecondPanel sp = new SecondPanel();
            Utility.ChangePanel(sp);
            sp.run();
        }
    }

    JButton Loginbtn;

}
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;


public class SecondPanel extends JPanel
{
    SecondPanel()
    {
        setLayout(new GridLayout(2,2));

        //set deck image
        File deckfile = new File("./src/testing/Ace_Club_1_1.png"); //deck image file location

        try
        {    
          Deckimg = ImageIO.read(deckfile); //read deck image


        }

        catch (IOException e)
        {

        }

         Image scaledInstance = Deckimg.getScaledInstance(100, -1, Image.SCALE_SMOOTH);
         DeckLabel = new JLabel(new ImageIcon(scaledInstance));
         add(DeckLabel);

    }

    public void run()
    {
        Timer timer = new Timer(5000, new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {
                // Code to be executed
                System.out.println("HowareYou");

            }
        });
        timer.setRepeats(false); // Only execute once
        timer.start(); // Go go go!

        try
        {
             Thread.sleep(7000);
        }



        catch(InterruptedException ie)
        {

        }

    }

    JLabel DeckLabel;
    JPanel DeckPanel;
    BufferedImage Deckimg;

}
用于在JFrame内切换JPanel的实用程序类

package testing;

import java.security.MessageDigest;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Utility 
{    
    public static void ChangePanel(JPanel jp)
    {


        testing.Testing.frame.getContentPane().removeAll();
        testing.Testing.frame.add(jp);
        testing.Testing.frame.validate();


    }

}


您正在使用
thread.sleep(7000)
阻止
SecondPanel.run()中的Swing事件线程。这将停止任何GUI更新。如果删除睡眠,您应该会看到第二个面板在计时器启动之前出现。

您正在用
thread.sleep(7000)
阻塞
SecondPanel.run()
中的Swing事件线程。这将停止任何GUI更新。如果删除睡眠,您应该会看到第二个面板在计时器启动之前出现。

您正在用
thread.sleep(7000)
阻塞
SecondPanel.run()
中的Swing事件线程。这将停止任何GUI更新。如果删除睡眠,您应该会看到第二个面板在计时器启动之前出现。

您正在用
thread.sleep(7000)
阻塞
SecondPanel.run()
中的Swing事件线程。这将停止任何GUI更新。如果您取消睡眠,您应该会看到第二个面板在计时器启动之前出现。

有两个错误。计时器是从run()和第二个开始初始化的。被线程杀死。Sleeputility是无用的类使用CardLayout,更好的是使用JLabel。setIcon(我的本地变量在应用程序启动时初始化)Scaled instalne非常异步,带有,必须计算可能的延迟(没有绘制图标,只有鼠标悬停在重新绘制正确的图像上)@mKorbel,在
run
方法中创建
Timer
有什么问题?另外,调用
Thread.sleep
不会“杀死”计时器,它仍然会在另一个线程上运行,或者这不是你的意思?我同意使用
CardLayout
会更好,但这不是@Computernerd问题的原因。@SimonC的想法是错误的,可能会产生副作用(run()中的所有内容都会导致死亡……)有两个错误。计时器是从run()和第二个开始初始化的。被线程杀死。Sleeputility是无用的类使用CardLayout,更好的是使用JLabel。setIcon(我的本地变量在应用程序启动时初始化)Scaled instalne非常异步,带有,必须计算可能的延迟(没有绘制图标,只有鼠标悬停在重新绘制正确的图像上)@mKorbel,在
run
方法中创建
Timer
有什么问题?另外,调用
Thread.sleep
不会“杀死”计时器,它仍然会在另一个线程上运行,或者这不是你的意思?我同意使用
CardLayout
会更好,但这不是@Computernerd问题的原因。@SimonC的想法是错误的,可能会产生副作用(run()中的所有内容都会导致死亡……)有两个错误。计时器是从run()和第二个开始初始化的。被线程杀死。Sleeputility是无用的类使用CardLayout,更好的是使用JLabel。setIcon(我的本地变量在应用程序启动时初始化)Scaled instalne非常异步,带有,必须计算可能的延迟(没有绘制图标,只有鼠标悬停在重新绘制正确的图像上)@mKorbel,在
run
方法中创建
Timer
有什么问题?另外,调用
Thread.sleep
不会“杀死”计时器,它仍然会在另一个线程上运行,或者这不是你的意思?我同意使用
CardLayout
会更好,但这不是@Computernerd问题的原因。@SimonC的想法是错误的,可能会产生副作用(run()中的所有内容都会导致死亡……)有两个错误。计时器是从run()和第二个开始初始化的。被线程杀死。Sleeputility是无用的类使用CardLayout,更好的是使用JLabel。setIcon(我的本地变量在应用程序启动时初始化)Scaled instalne非常异步,带有,必须计算可能的延迟(没有绘制图标,只有鼠标悬停在重新绘制正确的图像上)@mKorbel,在
run
方法中创建
Timer
有什么问题?另外,调用
Thread.sleep
不会“杀死”计时器,它仍然会在另一个线程上运行,或者这不是你的意思?我同意使用
CardLayout
会更好,但这并不是@Computernerd问题的原因。@SimonC的想法是错误的,可能会产生副作用(run()中的所有内容都会导致死亡……)