小编ddi*_*rov的帖子

你能推荐一个Java库来读取(并可能写)CSV文件吗?

你能推荐一个Java库来读取,解析,验证和映射逗号分隔值(CSV)文件中的行到Java值对象(JavaBeans)吗?

java csv parsing

49
推荐指数
3
解决办法
6万
查看次数

生成光谱调色板

有没有一种简单的方法来转换Java(RGB,HSV和Lab)中的颜色模型.

假设RGB颜色模型:

  • 如何计算黑体光谱调色板?我想将它用于热图图表.
  • 单波长光谱怎么样?

编辑:我发现ColorSpace类可用于RGB/CIE和许多其他颜色模型之间的转换.

java colors

14
推荐指数
2
解决办法
3万
查看次数

检测Webstart是否启动应用程序的最佳方法是什么?

正如我在最近的问题中明确指出的那样,Swing应用程序在使用Sun Webstart启动程序(至少从Java SE 6开始)运行时需要显式调用System.exit().

我想尽可能地限制这个hack,我正在寻找一种可靠的方法来检测应用程序是否在Webstart下运行.现在我正在检查系统属性"webstart.version"的值是否为空,但我在文档中找不到任何保证,该属性应由未来的版本/替代实现设置.

有没有更好的方法(最好不要停止对webstart API的依赖?)

java java-web-start

13
推荐指数
2
解决办法
3238
查看次数

我是否必须在Webstart应用程序中显式调用System.exit()?

最近我将Swing应用程序转换为Webstart.这个过程非常简单,但我发现在关闭所有窗口之后,我的应用程序的JVM没有终止.线程转储显示有几个非守护进程线程,特别是Swing的EDT,AWT和一些websart相关的线程.

使用的实际策略是每个窗口在创建时递增计数器,在关闭时递减1.默认关闭操作是DISPOSE_ON_CLOSE.温计数器达到零,我停止所有线程池并释放所有JNI资源.

当我从一个bat文件(相同的JAR)启动应用程序时,它在所有窗口关闭时终止,所以我认为这个问题与Webstart有关.

现在的问题是:

  1. 谁能告诉我究竟发生了什么?为什么Webstart会离开僵尸JVM?
  2. 有没有办法在不停止JVM的情况下显式释放Webstart资源?
  3. 我一直认为调用System.exit()会鼓励不要释放你的资源并依赖操作系统来清理你(如果你以后重用代码会导致令人讨厌的意外)的草率做法......我错过了什么吗?

另请参阅用于检测Webstart是否已启动应用程序的后续问题.

java swing java-web-start

8
推荐指数
1
解决办法
2177
查看次数

是否允许在非EDT线程中加载Swing类?

在引入Java Memory Model之后,Swing指南被更改为声明任何Swing组件需要在EDT上实例化以避免未发布的实例状态.

我无法在任何地方找到的是类加载是否也被强制要求在EDT上,还是我们可以在后台线程中预加载关键的Swing类?Sun/Oracle对此有何正式声明?是否有任何已知的类保持非线程安全静态,因此需要在EDT上加载?

澄清解决内米的问题:这是一个实际问题.我们的应用程序启动时间的相当大一部分用于在EDT上进行类加载和字体/图像加载.其中大部分可归因于Swing和相关库.

这是som背景:与许多其他Swing应用程序一样,在启动时我们预先构建了许多表单,以使UI更具响应性.在分析之后,我们发现表单构造的实际时间相对较快 - 所有类和字体的加载速度都很(使用按访问病毒扫描程序,监视扫描程序,审计跟踪器和上帝知道还有什么其他内容,企业设置中的磁盘读取速度加上硬盘驱动程序).

我们试图在后台线程中构造相同的表单(违反Swing的规则),然后扔掉它们.一旦我们完成,我们在EDT上构建相同的表单,这比加载所有类和磁盘缓存中的任何其他文件要快得多.它适用于我们,我们可能会继续这样做,除非发生一些非常糟糕的事情.

我问的是这是一种安全的做法,一种良好的做法还是一种黑客行为?

java swing classloader

8
推荐指数
1
解决办法
509
查看次数

Reactive Streams - 使用超时批处理

我正在寻找替换本土的日志处理库,它看起来非常接近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

8
推荐指数
1
解决办法
653
查看次数

无法使Coverity Scan工作(Windows和Travis上的Java/Kotlin/Gradle 3.3)

更新:请参阅Caleb答案中的解决方案

我正在努力让Coverity为我的构建工作,但到目前为止收效甚微.

首先是细节:

  • 我的项目运行了mill java库(没有web或花哨的容器),只有很少的编译依赖项,使用Gradle构建
  • 生产代码用Java和Kotlin编写
  • 完整的项目可以在github上找到:https://github.com/ddimtirov/nuggets
  • 在Coverity Scan上:https://scan.coverity.com/projects/ddimtirov-nuggets tab = project_settings
  • 我的开发环境是Windows 10,Java 1.8.0_92,Gradle 3.3,CMD shell(虽然我也试过Cygwin和Mingw Bash)
  • 还有Travis在Linux上构建

我首先从以下网址下载了一个软件包: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)

java gradle kotlin coverity

7
推荐指数
1
解决办法
1107
查看次数

寻找务实的CMDB解决方案

我需要一个解决方案来编制我们公司的许多应用程序(超过100个不到1000个).

现在我们正在使用电子表格,我们为每个应用程序填写名称,简短描述,联系人和维护者(内部或供应商).目的是将此列表用于IT计划和事件管理(影响估计等).为此,我们至少需要开始添加"依赖于","部分"或"取代"之类的关系.如果未来的解决方案允许标记,为每个条目添加索引键值对,注释和附件,那么它也会很有用.

我们不希望发现应用程序的所有已部署实例,管理配置设置,集成监视具有复杂的安全设置并在元元架构中被隐藏.任何需要专门管理员的东西都已经太重了.

我们有以下非功能性要求:

  • 应该允许多个用户同时在其上工作
  • 每个更改都应该进行版本控制
  • 轻松导出到XML或其他一些易于解析的格式

到目前为止,我们考虑了以下内容:

  • 将电子表格放在Confluence维基上,我们可以通过WebDav对其进行编辑(并获得锁定和版本控制)
  • 使用Confluence维基,因为它提供标记,层次结构,元数据和链接.唯一的问题是维基过于自由,如果我们决定迁移到另一个系统,可能很难提取信息.
  • DabbleDB.com - 拥有我们需要的一切,但不幸的是数据不应该离开防火墙.
  • OneCMDB.org - 我不确定捕获广告信息和发展架构是多么容易.会很感激经历.
  • Zenoss.com - 尚未检查过.看起来太专注于网络管理.
  • 轻量级注册表(Mule Galaxy,WSO2注册表) - 不确定这是否是适合该工作的工具,尽管它们提供了我们需要的许多工具(属性,标签,版本,生命周期).
  • BMC Atrium - 复杂的企业政治需要一些不必要的程序.除非它提供了一些巨大的好处,否则我们宁愿坚持使用开源.

我对那些成功经历过类似努力或有过上述一些方法经验的人的反馈/想法感兴趣.另外,我很感激有关常见陷阱和建议的建议.

itil cmdb

6
推荐指数
1
解决办法
6439
查看次数

Java 中的未绑定泛型返回类型

我正在考虑一些关于构建 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)

java generics api-design

5
推荐指数
1
解决办法
458
查看次数

在这种情况下,为什么 Streams API 需要泛型类型的提示?

以下情况无法编译:

    @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)

唯一的区别是我引入了一个额外的变量。请注意,我没有进行强制转换,因此没有语义更改。

有人能解释为什么需要这个吗?

java generics inferred-type java-stream

5
推荐指数
1
解决办法
2003
查看次数

HP/Tandem NonStop如何在没有备件的情况下实现单故障FT?

至于我可以从维基百科和令人难以置信的HPE网站收集,NonStop系统架构声名鹊起,它可以实现单故障FT,而无需分配过多的备用容量(即,通常采用锁步架构需要过度提供3倍).

这似乎是一个理想的属性,但我找不到有关他们使用的方法和警告的更多细节.即他们对网络做出的假设是什么,他们容忍的失败类型,假设客户行为,可接受的恢复时间,他们运行的工作流程等等.

任何人都可以简要描述一下NonStop系统如何解决故障检测和故障纠正的典型问题?它是系统级别的通用神奇解决方案,还是要求编写应用程序以使用某些事务工具和检查点数据和通信?

非常感谢!

fault-tolerance tandem hp-nonstop

3
推荐指数
1
解决办法
285
查看次数

处理与JavaFx和Griffon的比较

任何人都可以将Processing vs plain JavaFX vs Griffon与Swing/Fx构建器进行比较?我对每个takelkit的甜点感兴趣,特别是对于构建丰富的可视化仪表板.

java graphics comparison user-interface toolkit

2
推荐指数
1
解决办法
1798
查看次数