关于java控件-TimerTask通过exe4j做成软件后的时间问题

起床搬砖 2018-09-18 04:01:54
我设置了一个程序让它固定在3点的时候执行里面的run()方法,但是在我4点开启这软件的时候它并没有等到第二天的3点跑而是直接执行了run()里面的方法并且运行不完善,反之我在2点的时候开启这个软件却能在3点的时候准确无误的跑下这个程序。各大神,可以说说这是啥原理以及怎么解决吗?
因为一些公司信息,附上基本的代码,感谢大神帮我看看~
public static List ls3 = new ArrayList<>();

public static void main(String[] args) {
cronJob(15, 00, 00);
cronJob(15, 01, 00);
}

public static void cronJob(int shi, int fen, int miao) {
Calendar cal = Calendar.getInstance();
// 每天定点执行
cal.set(Calendar.HOUR_OF_DAY, shi);
cal.set(Calendar.MINUTE, fen);
cal.set(Calendar.SECOND, miao);

Timer timer = new Timer();
timer.schedule(new TimerTask() {

public void run() {
Workbook wb = null;
Sheet sheet = null;
Row row = null;
List<Map<String, String>> list = null;
String cellData = null;

String files = "C:\\Users\\Administrator\\Desktop\\tt";
File file = new File(files);
// 取得文件列表
File[] dir = file.listFiles();

// 删除单条数据
if (ls3.size() > 0) {
for (int l = 0; l < ls3.size(); l++) {
Map<String, String> deleteResult = api.deleteData((String) ls3.get(l));
System.out.println("删除单条数据:");
System.out.println(deleteResult);
}
}

// 遍历文件夹下的所有文件
for (int i = 0; i < dir.length; i++) {
// 取得文件名称
String filePath = files + "\\" + dir[i].getName();
String columns[] = { "Shift&Line", "Order No", "Item No.", "Mat des", "MRP ctrlor", "Group",
"Priority", "order qty.", "output", "plan hours", "Operators", "Credit Time", "Start Date",
"Start time", "Weight", "Week", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "Remark" };
wb = readExcel(filePath);
if (wb != null) {
// 用来存放表中数据
list = new ArrayList<Map<String, String>>();
// 获取第一个sheet
sheet = wb.getSheetAt(0);
// 获取最大行数
int rownum = sheet.getPhysicalNumberOfRows();
// 获取第一行
row = sheet.getRow(0);
// 获取最大列数
int colnum = row.getPhysicalNumberOfCells();
for (int j = 1; j < rownum; j++) {
Map<String, String> map = new LinkedHashMap<String, String>();
row = sheet.getRow(j);
if (row != null) {
cellData = (String) getCellFormatValue(row.getCell(0));
if ("Shift&Line".equals(cellData) || "".equals(cellData)) {
continue;
}
for (int k = 0; k < colnum; k++) {
cellData = (String) getCellFormatValue(row.getCell(k));
map.put(columns[k], cellData);
}
} else {
break;
}
list.add(map);
}
}
// 遍历解析出来的list
final List<String> ls2 = new ArrayList<String>();
for (Map<String, String> map : list) {
for (Entry<String, String> entry : map.entrySet()) {
ls2.add(entry.getValue());
}
}

// 拆分
List<List<String>> result = createList(ls2, 24);
// 创建单条数据
for (int m = 0; m < (ls2.size() / 24); m++) {
List ls = new ArrayList<>();
for (int n = 0; n < 24; n++) {
ls.add(result.get(m).get(n));
}
Map<String, Object> create = new HashMap<String, Object>() {
{
// 线号
put("_widget_1526028234352", new HashMap<String, Object>() {
{
put("value", ls.get(0));
}
});

。省略

// Sun
put("_widget_1530256865998", new HashMap<String, Object>() {
{
put("value", ls.get(22));
}
});
// Remark
put("_widget_1526026292045", new HashMap<String, Object>() {
{
put("value", ls.get(23));
}
});
}
};
Map<String, Object> createData = api.createData(create);
ls3.add(createData.get("_id"));
System.out.println("创建单条数据:");
System.out.println(createData);
}
}
}
}, cal.getTime(), 24 * 60 * 60 * 1000);
}
...全文
275 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
起床搬砖 2018-09-19
  • 打赏
  • 举报
回复
感谢两位的帮忙
java1357924680 2018-09-18
  • 打赏
  • 举报
回复
参考
timer问题
起床搬砖 2018-09-18
  • 打赏
  • 举报
回复
不对啊。。。我仔细看了一下,我这个就是第三个方法。。
起床搬砖 2018-09-18
  • 打赏
  • 举报
回复
引用 1 楼 HeiBoyYang 的回复:
schedule的4种用法 1.schedule(task, time) task(TimerTask):要执行的任务 time(Date):执行的时间(什么时候去执行),只执行一次,如果time早于现在的时间,就会立即执行。 2.schedule(task, delay) task(TimerTask):要执行的任务 delay(Long):多久后去执行,只执行一次。比如如果delay的值为2000,task就会在距离当前时间2秒后去执行。 3.schedule(task, time, period) task(TimerTask):要执行的任务 time(Date):第一次执行任务的时间 period(Long):每隔多久执行一次。比如period的值为2000,task就会在第一次执行之后,每隔2秒执行一次任务。 4.schedule(task, delay, period) task(TimerTask):要执行的任务 delay(Long):多久后去执行 period(Long):每隔多久执行一次
那二楼大神您的意思是让我改为第三种方法?然后让它每隔一天执行一次?
HeiBoyYang 2018-09-18
  • 打赏
  • 举报
回复
schedule的4种用法

1.schedule(task, time)

task(TimerTask):要执行的任务

time(Date):执行的时间(什么时候去执行),只执行一次,如果time早于现在的时间,就会立即执行。

2.schedule(task, delay)

task(TimerTask):要执行的任务

delay(Long):多久后去执行,只执行一次。比如如果delay的值为2000,task就会在距离当前时间2秒后去执行。

3.schedule(task, time, period)

task(TimerTask):要执行的任务

time(Date):第一次执行任务的时间

period(Long):每隔多久执行一次。比如period的值为2000,task就会在第一次执行之后,每隔2秒执行一次任务。

4.schedule(task, delay, period)

task(TimerTask):要执行的任务

delay(Long):多久后去执行

period(Long):每隔多久执行一次
内容概要:本文提出了一种基于粒子群优化算法(PSO)的风光储能微电网日前经济调度模型,创新性地引入需求响应机制,以实现系统运行成本最小化为目标。该模型综合考虑风力发电、光伏发电、储能系统及可调节负荷的运行特性,构建了包含电力供需平衡、设备出力能力、储能容量约束在内的完整数学模型,并通过Python编程实现PSO算法求解,有效提升了新能源消纳水平并降低了购电成本与运行费用。研究不仅实现了多能源协调优化调度,还为高比例可再生能源接入背景下的微电网经济运行提供了可行的技术路径。; 适合人群:具备一定电力系统基础知识和Python编程能力的科研人员、研究生及从事新能源微电网优化调度相关工作的工程技术人员。; 使用场景及目标:①研究含高比例可再生能源的微电网经济调度问题;②掌握粒子群算法在电力系统优化中的建模与应用方法;③开展计及需求响应的多能源协同调度仿真分析,探索用户侧灵活性资源参与系统优化的潜力。; 阅读建议:建议读者结合提供的Python代码深入理解算法实现细节,重点关注目标函数构建、约束条件处理及PSO参数设置,可进一步拓展至其他智能优化算法对比分析,或引入碳排放、电压稳定性等多目标优化维度进行深化研究。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 修改自己电脑的OEM信息及产品ID 本文主要讲述了如何修改自己电脑的OEM信息及产品ID,以拥有一个跟正版一样的显示效果。 文章共分为两种方法介绍了如何修改OEM信息,分别是通过软件进行修改和手动修改注册表信息。 方法一:通过软件进行修改 软件可以帮助用户快速地修改OEM信息,使用非常简单,只要选择想要修改到的厂商就可以了。 然后在高级选项中选择是否要在开始菜单中显示OEM图标和厂商信息。 通过以上步骤,用户的电脑就能拥有一个跟OEM版本一样的信息了! 方法二:手动修改注册表信息 手动修改注册表信息需要用户具备一定的计算机知识和技能。 用户需要上网搜索一张OEM logo或者从另外一台电脑上复制一张logo到自己的电脑上。 然后,用户需要找一个图标文件命名为 OEMLINKICON.ICO,作为支持信息之前的那个小图标。 接下来,用户需要修改个人信息,打开注册表编辑器,搜索到“RegisteredOwner”和“RegisteredOrganization”,这两样分别指注册者姓名和注册者单位,修改成自己的就可以了。 然后,用户需要制作“厂商、电脑型号”和“技术支持信息”(如果你的电脑有的话)。 新建一个文本文档,输入[Version]Microsoft Windows Whistler EditionWinVer=5.01[General]Manufacturer=xx(厂商)有限公司Model=xx 系列电脑[Support Information],这是“技术支持信息”的内容。 Line1=""Line2=""Line3=""Li...
内容概要:本文介绍了一项关于“风储VSG-基于虚拟同步发电机的风储并网系统Simulink仿真”的技术研究,重点探讨虚拟同步发电机(VSG)控制策略在风力发电与储能系统联合并网中的应用。通过Simulink搭建风储协同动态模型,引入VSG控制以模拟传统同步发电机的惯性与阻尼特性,有效提升系统在电网扰动下的频率稳定性与电能质量。该仿真系统可用于分析风储系统的功率协调控制、动态响应特性及并网稳定性,适用于高比例可再生能源接入背景下的新型电力系统研究与优化设计。; 适合人群:具备电力系统、自动控制或新能源等相关专业背景的研究生、科研人员,以及从事风电并网、储能系统开发与电力电子控制的工程技术人员。; 使用场景及目标:①开展风储联合并网系统的建模与动态仿真研究;②验证VSG控制策略对系统稳定性的提升效果;③用于高校教学演示、科研项目中的VSG原理分析与性能评估;④支持学术论文复现、课题创新及先进控制算法的开发与测试; 阅读建议:建议使用者熟悉Simulink建模流程及电力电子变换器控制原理,结合提供的仿真模型进行实操演练,重点关注VSG关键参数(如虚拟惯量、阻尼系数)对系统动态性能的影响,并可进一步拓展至多机并联、孤岛/并网模式切换等复杂运行工况的研究。

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧