下面的代码片段从某个URL下载文件并将其保存到本地文件.小菜一碟.这可能有什么不对吗?
protected long download(ProgressMonitor montitor) throws Exception{
long size = 0;
DataInputStream dis = new DataInputStream(is);
int read = 0;
byte[] chunk = new byte[chunkSize];
while( (read = dis.read(chunk)) != -1){
os.write(chunk, 0, read);
size += read;
if(montitor != null)
montitor.worked(read);
}
chunk = null;
dis.close();
os.flush();
os.close();
return size;
}
Run Code Online (Sandbox Code Playgroud)
我在这里发布问题的原因是因为它在99.999%的时间内工作,并且只要在运行此代码的计算机上安装了防病毒软件或其他一些保护软件,它就无法正常工作.我盲目地指着一个手指,因为每当我停止(或禁用)它时,代码再次完美.这种干扰的最终结果是下载文件的MD5与预期的不匹配,并开始全新的传奇.
所以,问题是 - 一些智能"保护"软件真的有可能在不知情的情况下改变来自URL的实际流吗?如果是的话 - 你怎么处理这个?(通过Kasperksy和Norton产品验证).
编辑-1: 显然我已经解决了这个问题,它与防病毒无关.下载发生在FTP服务器(特别是FileZilla),我们在客户端使用apache commons ftp.我做的是去了FTP服务器并在下载过程中终止了连接(踢出去).我希望is.read(..)会在客户端抛出IOException,但这从未发生过.相反,is.read(..)返回-1意味着没有更多数据来自流.这绝对是意料之外的,并解释了为什么有时我得到部分文件 然而,这并不能解释为什么有时数据也会被改变.
不知怎的,我的java应用程序与mongodb交谈时得到了大量名为MongoCleanerXXX的停放(休眠)线程,我认为这些线程来自驱动程序.那些人数是~600.显然,数据库存在一些连接问题,在mongod重启后一段时间后确实恢复了.
MongoDB Java驱动程序版本是2.10.1 MongoDB版本是2.2.0
可能是什么原因以及我应该做错什么导致它作为MongoDB的客户端应用程序?
在Java(v6)中实现Win32等效的WaitForMultipleObjects最优雅的方法是什么.线程正在休眠,直到发生多个事件之一.当发生这种情况时,我想处理它并重新入睡.不需要数据,只需要一个事件.
如何在特定页面上打开首选项对话框?这样做会打开pref.默认情况下,第一页上的对话框:
OpenPreferencesAction action = new OpenPreferencesAction();
action.run();
Run Code Online (Sandbox Code Playgroud)
如何告诉它显示首选项树中的其他页面?
对于我在使用大型SWT表的RCP应用程序中追逐一段时间的问题,这更像是一个答案.
问题是SWT Table.remove(int start,int end)方法的性能.它提供了非常糟糕的性能 - 在我的Windows XP上每100个项目大约50毫秒.但真正的节目制作者是在Vista和Windows 7上,删除100个项目需要5秒钟!查看表格的源代码表明,在这次调用中有大量的窗口事件飞来飞去.这使得窗口系统瘫痪.
解决方案是在这次通话中隐藏该死的东西:
table.setVisible(false);
table.remove(from, to);
table.setVisible(true);
Run Code Online (Sandbox Code Playgroud)
这确实很奇怪 - 在XP和Windows7上删除500个项目需要大约15毫秒,这只是打印我使用的时间戳的开销.
好:)
我有点陷入迁移到最新的石英2.2和弹簧4.1 ......这是一个cron触发器,为了清晰起见我省略了工作和其他绒毛:
...
<bean id="timeSyncTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="timeSyncJob"/>
<property name="startDelay" value="10000"/>
<property name="cronExpression" value="0 0 1 * * ? *"/>
</bean>
...
Run Code Online (Sandbox Code Playgroud)
现在,我需要在运行时更改其cronExpression,并不像我想象的那么简单.我不能引用bean并更改属性,因为它的工厂提供了CronTrigger接口,而接口又不再具有setCronExpression方法,它已变为不可变.之前我可以简单地从上下文中取出一个触发器并设置其新的cron表达式.多年来它一直运作良好,直到升级变得不可避免.
那么,我们今天如何完成这项简单的任务呢?文件和版本完全丢失..提前感谢!
这是我的情景:
题:
我无法弄清楚如何处理#4.我手头上已经构建的MultiPartEmail实例无法发送.显然,再次执行email.send()会抛出这个:
java.lang.IllegalStateException:MimeMessage已经构建.
有没有办法重置这种非法状态,以便可以重复使用该消息.我真的没有从头开始创建新实例的方法 - 调用者早已不复存在,并且它将使整个机制变得非常丑陋,而无法使用已经构建的对象.我想我在这里错过了很简单的东西..
首先,我不是Mac开发人员和非常随意的Mac用户,所以请忍受我的问题.
我有一个相当大的RCP应用程序,主要针对Windows和Linux,适用于两者.现在,我试图在OSX(碳x86)上运行它,我发现它看起来很丑陋,没有任何像Mac一样,使用起来很笨拙.例如,这是一个我不能直视的最简单的事情,无论我做什么,这些按钮都不会像我希望的那样坐着:
这就是它在Windows上的比较(相同的代码库):
.
它会削减按钮高度,不会将它们放置正确,对齐是一团糟等.
这些只是冰山一角,可能存在更大的问题.
所以,我有两个问题:
1)我是否应该为使用RCP应用的MAC存在而烦恼?可能是死路一条,没有人真正做到了吗?毕竟苹果和java混合不多.
2)如果我这样做,我应该针对碳或可可吗?对于最新的mac开发,我想展望未来.我认为中心只会选择其中一个,你会选哪一个?标准是什么?
更新:
我已经为可可创建了分发,所有这些奇怪的渲染问题都消失了.使用eclispe rcp 3.7.一切看起来都很完美.
我正在寻找在某个地方成功安装程序时获得通知的最简单方法.我的应用程序是基于Java的,并且有Java安装程序,我可以轻松地建立一个客户端来执行任何参数的http调用,这不是问题.我的问题是另一方面 - 我有托管网站,我想直接在那里所有流量,但我不熟悉编程世界的那部分:)如果每个成功的安装将转储记录将是很好的在数据库中(我已经在网站上集成了MySql).另一个选择是向我发送一封电子邮件,或至少发送到日志文件中.越简单越好.要么没事.任何人都可以建议一种方法吗?我知道一点点PHP,或许可以做一些简单的事情,但没有一个例子或起点,它很容易迷失在今天的网络技术迷宫:)
java ×6
eclipse-rcp ×2
swt ×2
concurrency ×1
cron ×1
email ×1
ftp ×1
installation ×1
macos ×1
mongodb ×1
rcp ×1
sockets ×1
spring ×1
web ×1