我有一个演出合同,并在规范的第一个草案要求之一的请求,称该软件(为最终用户一个GUI应用程序)应该在Win 2000和Mac OS 7.5上运行.我不知道为什么他们愿意支持这种古老的系统,但我想它给我留下的Java作为原始C以外的唯一选择,或不是吗?
那么如果它是Java,那么我可以在这些目标上使用哪些Java版本限制?
此外,虽然它不是严格的主题,但我很欣赏有关在两个目标上运行软件的策略的评论.实际上,支持那些古老的系统以及现代系统甚至可能比支持Mac和Win更难,对吧?
作为另一个副业,我也很欣赏可以用来与客户讨论这个问题的事实,并让他选择OS X和XP.就像"嘿,今天使用的所有Mac中只有2%仍然使用比X更早的操作系统".
编辑:我的主要目的是在技术上做好充分准备,以协商规范应该是什么.
那样的话往往是一些管理者的思维的结果"哎呀,我的姑姑仍然采用OS 9和我打赌,还有人甚至更老式的,所以我们只发挥它的安全,并写下7.5".没有涉及任何技术判断,那没关系.这只是,在这种情况下,你必须仔细解释一下什么权衡还有,如果你成功了,它通常可以让你更加真实的规格.如果他们不得不赌钱,他们甚至不可能完全放弃Mac OS.
有了这样的硬件规格,如果不积极地帮助客户重塑他们,有什么事情发生时,你把号码在要约将支付所有疯狂的东西,然后又一些和经验不足的竞争者赢得"看到所有的影响,并在他们的报价中加入一个较低的数字,获得演出,这一切都以每个人的眼泪而告终.你可以去"嘿嘿,告诉你这样",但也不要拿现金.
编辑:感谢您仍然发布事实和建议,虽然我已经接受了原始问题的答案.我会继续推销那些东西,这肯定有帮助.还要感谢我对我的同情并试图让我免于签订糟糕的合同!但是别担心,我实际上并不打算为Mac OS 7.5编写代码 ... ;-)真的,真正监督所有影响将无论如何都会超出我的深度.
在工作线程的主循环中,必须轮询以了解是否有工作要做,我让它睡眠以便不忙等待.我如何确定睡眠的好长度?E. g.如果我每毫秒醒来,它根本就没用.如果我每隔十分钟醒来,它可能会使应用程序看起来没有响应(取决于线程正在做什么).
我之前听说过干部在下面说过,人类用户不会注意到100毫秒左右的时间跨度,但是从机器方面接近它呢?在开始变得浪费之前,间隔有多小?
我猜,它归结为这个问题的更一般(即平台无关)的版本.
编辑:当然,问题应该首先被重新描述为"如何将其更改为事件模式而不是轮询",但我们现在假设我不能或不想这样做.
我有一个统一的消息对象队列,有多个生产者和一个消费者.消费者正在发布信息,并且需要能够根据数据的来源授予访问权限,因此我希望生产者发送合适的标识符以及消息.生产者自己不能对远端访问限制负责.
id应该与生成器在我的应用程序中的角色有关.我想强制所有生产者必须定义一个,并且子类生成者可以选择继承或重新定义它.生产者的类名称是一个很好的近似值,但我想要识别的属性并不是类结构中固有的,而是我定义的东西.
我可以使用反射来找出类名或接口名称,但这有点过多的开销.此外,我不确定要寻找的适当财产是什么.
由于所有生成器都是同一个抽象父类的子类,我认为一个好方法是在那里(或在接口中)放置一个常量,但后来我意识到在Java中,"常量"实际上是一个"静态最终",这意味着我无法覆盖它,所以它不会那样工作.
一个更有经验的Java程序员将如何做到这一点?
当我将一个匿名内部类传递给一个函数时,我可以从该类的方法中引用当前作用域中的变量,如下所示:
class Caller {
private Object callerPrivate;
// ...
public void someMethod() {
final String callerLocal = "Eyes only";
ISomeInterface anon = new ISomeInterface() {
public void doSomethingInterfacy {
System.out.println(callerPrivate.toString());
System.out.println(callerLocal);
}
};
// this is some other object that puts ISomeInterfaces in a queue
// and makes them doSomethingInterfacy later
myCallManager.enqueue(anon);
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在上面的someMethod运行之后,调用者和带有小动画的队列可以分开,并且据我所知,JVM保持所有引用都是直的,这样总是有效.
但是,例如,如果队列被序列化,程序关闭并重新启动,然后队列被反序列化并且其中的项目将被运行,并且调用者实例很久就被遗忘了?
还有其他方法可以让周围的对象和匿名的内部类以一种在anon类内部调用的方式不再分离的方式分开吗?
我有三个接口的层次结构,祖父母,父母和孩子.父和子有一个方法"添加",这需要孩子不同的输入参数.虽然在子项中添加所需的签名没有问题,但是继承的方法将毫无意义,那么有没有办法在那里没有它?其他方法工作正常.
也许,为了实现我想要的,我可以完全改进设计,所以我将简要介绍接口的内容:
我收集由时间和价值组成的仪表读数.祖父母接口用于单个读取.我还有一些表示连续读数(一系列)的类,一个包含在同一时间段内运行的多个系列的类(让我们只调用一个表).
该表可以被视为一个系列(它将值与时间轴正交聚合),并且表和系列都可以被视为单个读数(实现提供不同的聚合方式),因此继承.这似乎很好,但对于add方法.(我可以在系列中添加一个单点,但是对于表格,我需要一个额外的参数来告诉我它属于哪个系列.)
如果我在界面前使用元数据标签,那是否与类前面的相同?我也可以这样做
[Event(name="fooUpdate", type="com.acme.events.FooEvent")
public interface IFoozer extends IEventDispatcher
{
}
// ... now omit that metadata in the implementations ...
public class Foozer extends EventDispatcher implements IFoozer
{
public function set bar(b:Bar):void
{
this.dispatchEvent(new FooEvent(FooEvent.FOO_UPDATE));
}
}
// ... and expect it to be known in MXML ...
<acme:Foozer fooUpdate="myUpdateHandler">
<!-- ... -->
</acme:Foozer>
Run Code Online (Sandbox Code Playgroud)
或者,同样地,用[Bindable]?
我想每天使用一次来自cronjob的tar和ftp备份我的SVN repo.这很容易,但我想确保在进行备份时没有提交等.虽然有时候白天/晚上这种情况极不可能,但我宁愿不依赖它,因为如果我已经在晚上处于危机中,我最不需要的就是我的SVN或我的备份获取弄乱.
我正在寻找一些非常简单但有效的保障措施.如果SVN客户端在备份运行时出错(它不会花那么长时间),这没关系.我应该用吗?
我开始在serverfault发布这个,但后来决定它稍微接近编程而不是sysadmin,特别是如果涉及钩子.如果您不这么认为,请随意移动它.
在我的Java应用程序中,有几个线程将数据放入队列中,另一个线程(只有一个)接受对象并调度它们.
有时,消费线程似乎没有注意到新项目已添加到队列中,因为指示轮询的日志消息不再出现.来自生成线程的日志消息表明这些项确实到达.谷歌搜索一些人告诉我,这似乎被称为"错过信号".由于我既不wait使用也不使用锁,我不确定这是否适用于我.
让我感到困惑的是,当我中断消费者线程时,它会处理队列中的所有项目,然后再次保持沉默,而不会退出.
这是消费者线程的主循环,生产者线程做的事情就像从套接字读取一样,它们唯一常见的是它们add()在消费者轮询的队列中使用.
public class FieldFrontService
{
// ...
private ConcurrentLinkedQueue<Transmission> _qRec;
// ...
private Runnable _createReceptionist()
{
return new Runnable() {
@Override
public void run()
{
while (!Thread.currentThread().isInterrupted()) {
Transmission tx = FieldFrontService.this._qRec.poll();
if (null == tx) {
try {
Thread.sleep(250);
} catch (InterruptedException e) {
break;
}
} else {
FieldFrontService.this._receiveTransmission(tx);
}
}
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud) 在多线程应用程序中,我有一个线程从套接字连接读取数据,直到发生读取超时.然后它设置一个关闭标志,向自己发送一个中断信号并在退出之前进行一些清理.作为清理的一部分,它调用close()客户端套接字.
我在调试器中验证了close()实际发生的调用.此外,它不会抛出异常.仍然,套接字报告正在连接.我知道,因为有另一个线程wait让它断开连接.此线程稍后应重新连接它,但不会因为调用isConnected()一直返回true.
这导致既不读取数据也不清除套接字并再次重新连接的情况.
如果打电话Socket.close(),有没有办法可以默默地失败?
意思是,如果我有:
<mx:Tree>
<!-- ... -->
</mx:Tree>
Run Code Online (Sandbox Code Playgroud)
并且我想通过执行(在AS中)来更改控件的某些行为或添加功能:
class ChristmasTree extends mx.controls.Tree {
// ...
}
Run Code Online (Sandbox Code Playgroud)
如何更改MXML以便使用我的类?
在手册中,它说明了如何通过MXML扩展组件,但我如何使用AS 进行扩展?