你能推荐一个Java库来读取,解析,验证和映射逗号分隔值(CSV)文件中的行到Java值对象(JavaBeans)吗?
有没有一种简单的方法来转换Java(RGB,HSV和Lab)中的颜色模型.
假设RGB颜色模型:
编辑:我发现ColorSpace类可用于RGB/CIE和许多其他颜色模型之间的转换.
正如我在最近的问题中明确指出的那样,Swing应用程序在使用Sun Webstart启动程序(至少从Java SE 6开始)运行时需要显式调用System.exit().
我想尽可能地限制这个hack,我正在寻找一种可靠的方法来检测应用程序是否在Webstart下运行.现在我正在检查系统属性"webstart.version"的值是否为空,但我在文档中找不到任何保证,该属性应由未来的版本/替代实现设置.
有没有更好的方法(最好不要停止对webstart API的依赖?)
最近我将Swing应用程序转换为Webstart.这个过程非常简单,但我发现在关闭所有窗口之后,我的应用程序的JVM没有终止.线程转储显示有几个非守护进程线程,特别是Swing的EDT,AWT和一些websart相关的线程.
使用的实际策略是每个窗口在创建时递增计数器,在关闭时递减1.默认关闭操作是DISPOSE_ON_CLOSE.温计数器达到零,我停止所有线程池并释放所有JNI资源.
当我从一个bat文件(相同的JAR)启动应用程序时,它在所有窗口关闭时终止,所以我认为这个问题与Webstart有关.
现在的问题是:
另请参阅用于检测Webstart是否已启动应用程序的后续问题.
在引入Java Memory Model之后,Swing指南被更改为声明任何Swing组件需要在EDT上实例化以避免未发布的实例状态.
我无法在任何地方找到的是类加载是否也被强制要求在EDT上,还是我们可以在后台线程中预加载关键的Swing类?Sun/Oracle对此有何正式声明?是否有任何已知的类保持非线程安全静态,因此需要在EDT上加载?
澄清解决内米的问题:这是一个实际问题.我们的应用程序启动时间的相当大一部分用于在EDT上进行类加载和字体/图像加载.其中大部分可归因于Swing和相关库.
这是som背景:与许多其他Swing应用程序一样,在启动时我们预先构建了许多表单,以使UI更具响应性.在分析之后,我们发现表单构造的实际时间相对较快 - 所有类和字体的加载速度都很慢(使用按访问病毒扫描程序,监视扫描程序,审计跟踪器和上帝知道还有什么其他内容,企业设置中的磁盘读取速度很慢加上硬盘驱动程序).
我们试图在后台线程中构造相同的表单(违反Swing的规则),然后扔掉它们.一旦我们完成,我们在EDT上构建相同的表单,这比加载所有类和磁盘缓存中的任何其他文件要快得多.它适用于我们,我们可能会继续这样做,除非发生一些非常糟糕的事情.
我问的是这是一种安全的做法,一种良好的做法还是一种黑客行为?
我正在寻找替换本土的日志处理库,它看起来非常接近ReactiveStreams io.projectreactor.目标是减少我们维护的代码,并利用社区添加的任何新功能(瞄准操作员融合).
首先,我需要使用stdio并将多行日志条目合并到流向管道的文本blob中.在Filebeat文档的多行日志条目章节中详细解释了用例(除了我们希望它在进程中).
到目前为止,我的代码是:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
Flux<String> lines = Flux.generate(sink -> rethrow(() -> { while (true) sink.next(input.readLine()); }));
Flux<String> logRecordsStr = lines.concatMap(new LogRecordJoiner());
Flux<LogRecord> logRecords = logRecordsStr.map(new LogRecordMapper());
logRecords.doOnEach(r -> System.out.printf("%s payload: %d chars\n", r.timestamp, r.payload.length()))
          .subscribe();          
Run Code Online (Sandbox Code Playgroud)
这会在检测到新的日志标头时关注多行合并,但在现有库中,我们还会在超时后刷新累积的行(即如果在5秒内没有收到文本,则刷新记录).
在Reactor中对此进行建模的正确方法是什么?我是否需要编写自己的运算符,还是可以自定义任何现有运算符?
任何有关在Project Reactor或RxJava中实现此用例的相关示例和文档的指针都将非常受欢迎.
reactive-programming rx-java project-reactor reactive-streams
更新:请参阅Caleb答案中的解决方案
我正在努力让Coverity为我的构建工作,但到目前为止收效甚微.
首先是细节:
我首先从以下网址下载了一个软件包:https://scan.coverity.com/download/java/win64
然后我将bin目录添加到我的路径,转到我的项目根目录并运行以下命令.
$ set PATH=%PATH%;C:\Users\dimit\sandbox\cov-analysis\bin
$ gradlew clean
$ cov-build --dir cov-int gradlew jar
Run Code Online (Sandbox Code Playgroud)
前2个按预期进行,最后一个 - 不是那么多:
Coverity Build Capture (32-bit) version 8.7.0 on Windows 10 Professional, 64-bit (build 14393)
Internal version numbers: b452b3f2c8 p-lodi-push-28091.612
The system cannot execute the specified program.
[WARNING] Build command gradlew.bat jar exited with code …Run Code Online (Sandbox Code Playgroud) 我需要一个解决方案来编制我们公司的许多应用程序(超过100个不到1000个).
现在我们正在使用电子表格,我们为每个应用程序填写名称,简短描述,联系人和维护者(内部或供应商).目的是将此列表用于IT计划和事件管理(影响估计等).为此,我们至少需要开始添加"依赖于","部分"或"取代"之类的关系.如果未来的解决方案允许标记,为每个条目添加索引键值对,注释和附件,那么它也会很有用.
我们不希望发现应用程序的所有已部署实例,管理配置设置,集成监视具有复杂的安全设置并在元元架构中被隐藏.任何需要专门管理员的东西都已经太重了.
我们有以下非功能性要求:
到目前为止,我们考虑了以下内容:
我对那些成功经历过类似努力或有过上述一些方法经验的人的反馈/想法感兴趣.另外,我很感激有关常见陷阱和建议的建议.
我正在考虑一些关于构建 Java API 的想法,今天我花了一些时间思考这段代码:
public <T> T getField1(Class<?> type, Class<T> retvalType, String fieldName) {
  Object retval = ...; // boring reflection code - value could be dog, could be duck
  return retvalType.cast(retval); // cast to expected - exception is raised here
}
// usage - we manually repeat the LHS type as a parameter
int foo = getField(o, Integer.class, "foo");
Run Code Online (Sandbox Code Playgroud)
这就是我通常编写 API 的方式,但他认为指定 可以retvalType给我额外的类型安全性。但确实如此吗?
因为我们涉及到反射,所以 retval 类型是未知的。retvalType仅当is 非泛型时,在第二行上进行强制转换才能可靠地捕获类型不匹配。另一方面,即使我们不执行这种显式转换,Java 运行时在将通用结果设置为变量时也会对通用结果进行转换 - 换句话说,如果我们将上面的代码重写为:
public <T> T getField2(Class<?> type, …Run Code Online (Sandbox Code Playgroud) 以下情况无法编译:
    @NotNull String defaultFormatter(@Nullable Object value) {
        if (value instanceof Collection) {
            return ((Collection) value).stream()
                        .map(MyClass::defaultFormatter)
                        .collect(Collectors.joining(eol));
        }
        return String.valueOf(value);
    }
Run Code Online (Sandbox Code Playgroud)
特别是,当使用 javac 编译时,错误将是:
Error:(809, 94) java: incompatible types: 
      java.lang.Object cannot be converted to 
      @org.jetbrains.annotations.NotNull java.lang.String
Run Code Online (Sandbox Code Playgroud)
但以下编译得很好:
    @NotNull String defaultFormatter(@Nullable Object value) {
        if (value instanceof Collection) {
            Stream<String> stream = ((Collection) value).stream()
                         .map(MyClass::defaultFormatter);
            return stream.collect(Collectors.joining(eol));
        }
        return String.valueOf(value);
    }
Run Code Online (Sandbox Code Playgroud)
唯一的区别是我引入了一个额外的变量。请注意,我没有进行强制转换,因此没有语义更改。
有人能解释为什么需要这个吗?
至于我可以从维基百科和令人难以置信的HPE网站收集,NonStop系统架构声名鹊起,它可以实现单故障FT,而无需分配过多的备用容量(即,通常采用锁步架构需要过度提供3倍).
这似乎是一个理想的属性,但我找不到有关他们使用的方法和警告的更多细节.即他们对网络做出的假设是什么,他们容忍的失败类型,假设客户行为,可接受的恢复时间,他们运行的工作流程等等.
任何人都可以简要描述一下NonStop系统如何解决故障检测和故障纠正的典型问题?它是系统级别的通用神奇解决方案,还是要求编写应用程序以使用某些事务工具和检查点数据和通信?
非常感谢!
任何人都可以将Processing vs plain JavaFX vs Griffon与Swing/Fx构建器进行比较?我对每个takelkit的甜点感兴趣,特别是对于构建丰富的可视化仪表板.
java ×9
generics ×2
swing ×2
api-design ×1
classloader ×1
cmdb ×1
colors ×1
comparison ×1
coverity ×1
csv ×1
gradle ×1
graphics ×1
hp-nonstop ×1
itil ×1
java-stream ×1
kotlin ×1
parsing ×1
rx-java ×1
tandem ×1
toolkit ×1