Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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 30秒倒计时;“谁想成为百万富翁?”;网虫_Java_Netbeans_Timer_Counter_Countdown - Fatal编程技术网

Java 30秒倒计时;“谁想成为百万富翁?”;网虫

Java 30秒倒计时;“谁想成为百万富翁?”;网虫,java,netbeans,timer,counter,countdown,Java,Netbeans,Timer,Counter,Countdown,因此,我正在努力在netbeans中制作一个版本的“Who what to a Milliant”,我的计时器有问题。我的工作代码基本上会在11秒后将数字的颜色更改为红色,并在1秒后消失(变为白色)。我要做的是让数字从5,4,3,2,1闪烁到第6秒后闪烁。但我找不到一个方法来实现这一点。我试过换衣服 Thread.sleep(1000); 所以我可以写一个更详细的if语句,比如 Thread.sleep(1000); if (counter < 5.75 ) g.setColor(

因此,我正在努力在netbeans中制作一个版本的“Who what to a Milliant”,我的计时器有问题。我的工作代码基本上会在11秒后将数字的颜色更改为红色,并在1秒后消失(变为白色)。我要做的是让数字从5,4,3,2,1闪烁到第6秒后闪烁。但我找不到一个方法来实现这一点。我试过换衣服

Thread.sleep(1000);
所以我可以写一个更详细的if语句,比如

Thread.sleep(1000);
if (counter < 5.75 )
  g.setColor(Color.WHITE);
if (counter < 5.25 )
  g.setColor(Color.BLACK);
if(计数器<5.75)
g、 setColor(Color.WHITE);
如果(计数器<5.25)
g、 设置颜色(颜色为黑色);
但是它不起作用

Thread.sleep(1000);
这就是我到目前为止所做的:

Thread.sleep(1000);
package timer2;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;



 import javax.swing.JFrame;
 import javax.swing.JPanel;

public class thread  extends JPanel implements Runnable {
private static Object ga;


 int counter;
 Thread cd;
 public void start() { 
 counter =30 ; 
 cd = new Thread(this);

 cd.start();

 }

 public void stop()
 {
     cd = null;
 }

public void run() { 
     while (counter>0 && cd!=null) {
     try
     {
         Thread.sleep(1000);
     }
     catch (InterruptedException e)
     {

     }
         --counter; 


               }

             } 


     public void paintComponent(   Graphics g)
    {

        repaint();
        super.paintComponent(g);
              g.setColor(Color.BLACK);

              if (counter < 1 )
                  g.setColor(Color.WHITE);
              g.setFont(new Font("Times New Roman",Font.BOLD,35));


              if (counter < 11)
                  g.setColor(Color.RED);
              if (counter < 1 )
                  g.setColor(Color.WHITE);







              g.setFont(new Font("Times New Roman",Font.BOLD,100));

              g.drawString(String.valueOf(counter),600,600);

    }
 public static void main(String[] args) {
     JFrame j=new JFrame();
     thread t=new thread();
     t.setBackground(Color.WHITE);
     t.start();

     j.add(t);


     j.setVisible(true);
        j.getContentPane().setBackground( Color.WHITE );
        j.setBounds(-8,-8,500,500); 
        j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        j.setExtendedState(JFrame.MAXIMIZED_BOTH);    
 }

}
package timer2;
导入java.awt.Color;
导入java.awt.Font;
导入java.awt.Graphics;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类线程扩展JPanel实现可运行{
私有静态对象遗传算法;
整数计数器;
线程cd;
public void start(){
计数器=30;
cd=新螺纹(此);
cd.start();
}
公共停车场()
{
cd=null;
}
public void run(){
while(计数器>0&&cd!=null){
尝试
{
睡眠(1000);
}
捕捉(中断异常e)
{
}
--计数器;
}
} 
公共组件(图形g)
{
重新油漆();
超级组件(g);
g、 设置颜色(颜色为黑色);
如果(计数器<1)
g、 setColor(Color.WHITE);
g、 setFont(新字体(“Times new Roman”,字体粗体,35));
如果(计数器<11)
g、 setColor(Color.RED);
如果(计数器<1)
g、 setColor(Color.WHITE);
g、 setFont(新字体(“Times new Roman”,字体粗体,100));
g、 抽绳(串值(计数器),600600);
}
公共静态void main(字符串[]args){
JFrame j=新的JFrame();
螺纹t=新螺纹();
t、 挫折地面(颜色:白色);
t、 start();
j、 加(t);
j、 setVisible(真);
j、 getContentPane().setBackground(Color.WHITE);
j、 立根(-8,-8500500);
j、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j、 setExtendedState(JFrame.MAXIMIZED_两者);
}
}
  • 首先也是最重要的一点——从paintComponent中获取
    repaint()
    。这永远不应该从那里调用
  • 您希望从计时器代码本身调用重新绘制
  • 为方便起见,避免直接使用后台线程和
    while(true)
    循环,而是希望使用更简单的Swing计时器进行计数
  • 我没有看到任何闪烁的代码,你是怎么做到的
  • 另外,我建议您尝试改进您在此处发布的代码的格式,以及您的代码的总体格式。良好的格式(包括使用统一一致的缩进样式)将帮助其他人(我们!)更好地理解您的代码,更重要的是,它将帮助更好地理解您的代码,从而修复您自己的错误。同时,这也表明你愿意付出额外的努力,让这里的志愿者更容易帮助你,这一努力非常值得赞赏

  • Thread.sleep(1000);
    
  • 要闪烁,请使用一个周期较短的计时器,例如200毫秒,并更改计时器内的颜色

  • Thread.sleep(1000);
    
    e、 g

    Thread.sleep(1000);
    
    导入java.awt.Color;
    导入java.awt.Dimension;
    导入java.awt.Font;
    导入java.awt.GridBagLayout;
    导入java.awt.event.ActionEvent;
    导入java.awt.event.ActionListener;
    导入java.util.Formatter;
    导入javax.swing.*;
    @抑制警告(“串行”)
    公共类倒计时扩展JPanel{
    私有静态最终字符串格式=“%02d”;
    私有静态最终颜色[]计时器颜色={Color.BLACK,Color.WHITE};
    专用静态最终整数标签_PTS=90;
    专用静态最终字体计时器\u LABEL\u Font=新字体(“Times new Roman”,Font.BOLD,LABEL\u PTS);
    专用静态最终整型预调W=600;
    私有静态final int PREF_H=PREF_W;
    专用静态最终int定时器_延迟=100;
    公共静态最终整数闪烁时间=6;
    专用JLabel timerLabel=新JLabel(“”);
    私人定时器;
    私有int-timerColorIndex=0;
    公共倒计时(整数秒){
    设置时间计数(秒);
    setLayout(新的GridBagLayout());
    添加(timerLabel);
    定时器=新定时器(定时器延迟,新定时器延迟(秒));
    timer.start();
    }
    公共最终作废setTimerCount(整数计数){
    String text=String.format(格式,计数);
    timerLabel.setText(文本);
    timerLabel.setFont(定时器标签字体);
    }
    公共空间快闪(){
    timerColorIndex++;
    timerColorIndex%=计时器颜色长度;
    timerLabel.setForeground(定时器颜色[timerColorIndex]);
    }
    @凌驾
    公共维度getPreferredSize(){
    如果(isPreferredSizeSet()){
    返回super.getPreferredSize();
    }
    返回新维度(PREF_W,PREF_H);
    }
    私有类TimerListener实现ActionListener{
    私有整数毫秒;
    公共计时器(int secondsLeft){
    this.mSeconds=1000*secondsLeft;
    }
    @凌驾
    已执行的公共无效操作(操作事件e){
    毫秒-=计时器延迟;
    整数秒=(毫秒+999)/1000;
    如果(秒<闪烁时间){
    flash();
    }
    设置时间计数(秒);
    如果(秒==0){
    ((计时器)e.getSource()).stop();
    }
    }
    }
    私有静态void createAndShowGui(){
    整数秒=20;
    倒计时器主面板=新倒计时器(20);
    JFrame frame=新JFrame(“倒计时”);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.getContentPane().add(主面板);