有人可以告诉我如何减慢精灵的出现速度以创建更流畅的动画吗?当我运行代码时,它出现在 JPanel 中的最后一个(第 27 个)精灵。动画处理速度太快了!
有人告诉我有关 Swing Timer 的信息,但不幸的是我尝试了几次,但无法让代码运行良好:(
这是我到目前为止的代码:
package sprites;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Sprites extends JFrame {
public static void main(String[] args) {
JFrame frm1 = new JFrame();
frm1.setSize(400, 400);
frm1.setLocationRelativeTo(null);
frm1.setResizable(false);
frm1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Painel1 pn1 = new Painel1();
frm1.getContentPane().add(pn1);
frm1.setVisible(true);
}
}
class Painel1 extends JPanel {
BufferedImage img;
public Painel1() {
setBackground(Color.yellow);
try
{
img = ImageIO.read(new File("images/dummy.png"));
}
catch …Run Code Online (Sandbox Code Playgroud) 我有一个tableview,我想在每天的特定时间(用户输入一个选择器)清空它.以下是它主要使用的代码,但是让我们说用户在晚上7点打开应用程序,更新时间是晚上8点,数据不会被删除(这是正确的)但是当时间是在同一天晚上9点并且应用程序打开数据不会被删除(这是不正确的).我认为这与lastRefreshDate应用程序打开时更新的evreytime时间有关,必须等待24小时lastRefreshDate而不是等待userPickedHour.该应用程序应该像这样工作有一个设定的时间晚上7点.因此,应用程序应该在第二天晚上7点或晚上7点后删除数据,当用户打开应用程序时,如果用户在第二天晚上7点之前打开应用程序,则不应删除数据,
这是代码:
class RefreshManager: NSObject {
static let shared = RefreshManager()
private let defaults = UserDefaults.standard
private let defaultsKey = "lastRefresh"
private let calender = Calendar.current
func loadDataIfNeeded(completion: (Bool) -> Void) {
if isRefreshRequired() {
// load the data
defaults.set(Date(), forKey: defaultsKey)
print("xxxxxx")
completion(true)
} else {
print("yyyyyy")
completion(false)
}
}
private func isRefreshRequired(userPickedHour: Int = 16) -> Bool {
let SleepPickerdate = UserDefaults.standard.object(forKey: "SleepDate") as? Date
let userPickedHour = Calendar.current.component(.hour, from: (SleepPickerdate)!)
print(userPickedHour) …Run Code Online (Sandbox Code Playgroud) 我有这个计时器:
class InstallationViewController: BaseViewController {
var precentageTimer: Timer!
}
Run Code Online (Sandbox Code Playgroud)
在同一堂课中,我像这样启动计时器:
self.precentageTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true, block: { (timer) in
self.network.getClibrationPercentage(success: { (info, percent) in
self.isAnalysisCompleted(percent: percent)
self.precentageLbl.text = "\(percent)%"
self.instructionsLbl.text = info
self.precentageLbl.isHidden = false
}, failure: { (error) in
print(error)
})
})
Run Code Online (Sandbox Code Playgroud)
我也有这样的方法来解除任务:
func dissmissAllTasks() {
NotificationCenter.default.removeObserver(self)
self.setCalibrationEnableTimer?.invalidate()
self.setCalibrationEnableTimer = nil
self.snapShotTimer?.invalidate()
self.snapShotTimer = nil
self.precentageTimer?.invalidate()
self.precentageTimer = nil
}
Run Code Online (Sandbox Code Playgroud)
当我像这样单步执行 viewWillDisappear 时就会发生这种情况:
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
dissmissAllTasks()
}
Run Code Online (Sandbox Code Playgroud)
但当我去其他 VC 时,我可以看到这个计时器一直在持续。我检查了调用的 dissmissAllTasks() ,我可以看到计时器为零。
为什么计时器一直走?
我在构造函数中调用了下面这个函数:
public void IntervalSC()
{
Random rnd = new Random();
double interval = rnd.Next(2000, 6000);
var SCTimer = new System.Timers.Timer();
SCTimer.Elapsed += new ElapsedEventHandler(dashboardController.Screenshot);
SCTimer.Interval = interval;
SCTimer.Enabled = true;
}
Run Code Online (Sandbox Code Playgroud)
我希望间隔dashboardController.Screenshot在 2000 到 6000 之间运行,但生成随机数后,它不会改变,并Screenshot以 生成的固定间隔继续运行该函数rnd。我知道这是因为IntervalSC()运行一次,所以间隔的随机数也只生成一次。因此,我正在寻找有关如何使这项工作dashboardController.Screenshot以随机间隔运行的建议。谢谢。
我想设置一个计时器,例如我的产品在添加到购物车时应该只显示30分钟.我试过了 :-
var d = new Date();
var minute = d.getHours()+30;
Run Code Online (Sandbox Code Playgroud)
另外我想向用户显示剩余时间(倒计时)
我知道这是错的.我想用jQuery做到这一点.我是jquery的新手,请帮助我
提前致谢.
我在Windows窗体应用程序中的Timer有问题.需要Timer记录归档时间的归档程序.然而有什么东西打断了计时器?
我怀疑是流.关于什么可能导致计时器中断的任何建议?
public partial class Form1 : Form
{
int timerCounter = 0;
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
public Form1()
{
InitializeComponent();
timer.Interval = 1000;
timer.Enabled = true;
}
public void button2_Click(object sender, EventArgs e)
{
timer.Start();
timer.Tick += new EventHandler(timer1_Tick);
// code for archiving, streams
timer.Stop();
MessageBox.Show("Archive was created! :)");
}
public void timer1_Tick(object sender, EventArgs e)
{
this.label7.Text = (++timerCounter).ToString();
}
Run Code Online (Sandbox Code Playgroud)
}
我是初学者,我想在我运行程序时启动计时器(即当父jFrame出现时)并在5秒后处理帧.我想在计时器启动时开始填充虚拟进度条,并将其完全填满,直到计时器熄灭.
我正在为我的程序编写测试代码.我需要代码每秒运行10000次.我的解决方案是:
for(int i = 0; i < 1000; ++i) {
for(int j = 0; j < 10; ++j) {
// do something here. Maybe ++k or some code else
}
usleep(1);
}
Run Code Online (Sandbox Code Playgroud)
事实证明,时间超过1秒.所以我必须调整1000和100才能满足要求.这不是一个好习惯:当运行时间发生变化时,我必须更改代码.
有任何想法吗?
更新:
该程序正在Linux上运行.我编写了一个msg队列.像往常一样,它有生产者和消费者.我想要全程测试.我需要测试代码发送几个msg,间隔很小(优选100μs).
如果我在没有睡眠的情况下发送所有消息,则消息队列将满,并且在整个测试期间不起作用.
我Timer在一个方法中设置了一个间隔为1000每秒钟它将另一个相应的字符Textbox键入一个(几乎自动输入).当我检查_currentTextLength == _text.Length我得到线程错误"调用线程无法访问此对象,因为另一个线程拥有它."
public void WriteText(string Text)
{
timer = new Timer();
try
{
_text = Text;
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed_WriteText);
timer.Interval = 1000;
timer.Enabled = true;
timer.Start();
}
catch
{
MessageBox.Show("WriteText timer could not be started.");
}
}
// Write Text Timer Event
void timer_Elapsed_WriteText(object sender, ElapsedEventArgs e)
{
TextBoxAutomationPeer peer = new TextBoxAutomationPeer(_textBox);
IValueProvider valueProvider = peer.GetPattern(PatternInterface.Value) as IValueProvider;
valueProvider.SetValue(_text.Substring(0, _currentTextLength));
if (_currentTextLength == _text.Length) // Error here
{
timer.Stop(); …Run Code Online (Sandbox Code Playgroud) 刚才有一些关于计时器和线程的混淆,见下面的例子,两个代码都提供了相同的结果(每隔60秒进行一次检查),所以什么时候应该使用计时器?何时我应该使用线程处理作业提供相同的结果?
使用线程:
Thread checkJob = new Thread(checkStatus);
checkJob.Start();
protected void checkStatus()
{
//Do Checking here
Thread.Sleep(60000);
}
Run Code Online (Sandbox Code Playgroud)
使用计时器:
public Form1()
{
InitializeComponent();
Timer time = new Timer();
time.Interval = 60000;
time.Tick += time_Tick;
time.Enabled = true;
}
void time_Tick(object sender, EventArgs e)
{
//Do Checking here
}
Run Code Online (Sandbox Code Playgroud)