Java 我的程序每秒点击次数的精确度是否降低了?
我做了一个自动售票机,它将显示每秒的平均点击次数,这将 每0.1秒刷新一次。它将计算过去4秒钟的点击次数 有没有可能我会失去准确度?因为我的费率最高为6,我会 假设在游戏体验中有更高的点击率Java 我的程序每秒点击次数的精确度是否降低了?,java,time,jbutton,actionlistener,Java,Time,Jbutton,Actionlistener,我做了一个自动售票机,它将显示每秒的平均点击次数,这将 每0.1秒刷新一次。它将计算过去4秒钟的点击次数 有没有可能我会失去准确度?因为我的费率最高为6,我会 假设在游戏体验中有更高的点击率 // Frame not shown import javax.swing.JOptionPane; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Ticker extends JP
// Frame not shown
import javax.swing.JOptionPane;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Ticker extends JPanel
{ private int d, count, rate, x; private int[] array;
private JLabel l;
public Ticker()
{ setLayout(new BorderLayout());
rate = x = 0;
// JPanel p = new JPanel();
setLayout(new GridLayout(2, 1));
JButton b = new JButton("Click");
b.addActionListener(new Listener());
b.setHorizontalAlignment(SwingConstants.LEFT);
add(b);
l = new JLabel("a");
l.setHorizontalAlignment(SwingConstants.CENTER);
add(l);
Timer t = new Timer(100, new Listener2());
t.start();
array = new int[40];
for (int k = 0; k < 40; k++)
array[k] = 0;
}
private class Listener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
count++;
}
}
private class Listener2 implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if (x > 39)
x = 0;
array[x] = count;
count = 0;
x++;
for (int i : array)
{ rate += i; }
l.setText("" + (int)(rate/4.0));
rate = 0;
// System.out.println((int)(x) +" " + array[(x-1)]);
}
}
}
//未显示帧
导入javax.swing.JOptionPane;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
公共类股票代码扩展JPanel
{private int d,count,rate,x;private int[]数组;
私人JLabel;
公众股票代码()
{setLayout(新的BorderLayout());
速率=x=0;
//JPanel p=新的JPanel();
setLayout(新的GridLayout(2,1));
JButton b=新JButton(“单击”);
b、 addActionListener(新建Listener());
b、 设置水平对齐(SwingConstants.左);
添加(b);
l=新的JLabel(“a”);
l、 设置水平对齐(旋转恒定中心);
加(l);
定时器t=新定时器(100,新监听器2());
t、 start();
数组=新整数[40];
对于(int k=0;k<40;k++)
数组[k]=0;
}
私有类侦听器实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
计数++;
}
}
私有类Listener2实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
如果(x>39)
x=0;
数组[x]=计数;
计数=0;
x++;
for(int i:array)
{rate+=i;}
l、 setText(“+(int)(比率/4.0));
比率=0;
//System.out.println((int)(x)+“”+数组[(x-1)];
}
}
}
谢谢。请记住,如果您快速单击,并浏览标准API,系统可能会将第二次单击解释为双击而不是单击。(根据keshlam的评论)感谢你的提醒,我通常认为大多数现代处理器都能够在延迟到毫秒之前处理更多的信息。。。在一些程序中,我可以在一眨眼的时间内扫描数千个单词……处理器能力、驱动程序能力和外围设备能力是完全不同的。我认为你正在失去一些东西。我可以达到6/秒。但后来我用b.doClick()每秒按了10次按钮,效果很好。但当我开始点击10/秒的顶部时,我只能得到11/秒而不是16/秒。也许你不应该使用ActionPerformed,而应该将程序改为使用MouseListener,并计算MousePressed和MouseRelease?感谢(keshlam和Roy)的建议,我将试用MouseListener,看看它是否能提高准确度,我担心数组上的强点击是否会失去速度。