标签: openjdk

如果我从Sun JDK切换到OpenJDK,我必须为自己做好准备吗?

如果我从Sun JDK切换到OpenJDK,我必须为自己做好准备吗?

什么经常出错,这有多难?

当然,每个应用程序都可以有个人的问题,但我在寻找的问题,这是许多人已经在努力的JDK切换时.

java openjdk

36
推荐指数
1
解决办法
1493
查看次数

在Java中,"1/0"是一个常量表达式吗?

据我所知,Java 8 JLS表达式(1/0)被认为是一个常量表达式,但是当我尝试使用OpenJDK 8编译以下程序时出现错误

public class Switch {
    public static void main(String[] args) {
        switch(42) {
            case (1/0):
                return;
            default:
                return;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

错误说(1/0)不是一个常量表达式

Switch.java:4: error: constant expression required
            case (1/0):
                 ^
1 error
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?或者它是OpenJDK 8中的错误?

java openjdk compiler-errors jls java-8

33
推荐指数
2
解决办法
1412
查看次数

为什么Instant不支持使用ChronoUnit.YEARS进行操作?

这对我来说意外:

> Clock clock = Clock.systemUTC();

> Instant.now(clock).minus(3, ChronoUnit.DAYS);
java.time.Instant res4 = 2016-10-04T00:57:20.840Z

> Instant.now(clock).minus(3, ChronoUnit.YEARS);
java.time.temporal.UnsupportedTemporalTypeException: Unsupported unit: Years
Run Code Online (Sandbox Code Playgroud)

作为一种解决方法,我必须这样做:

> Instant.now(clock).atOffset(ZoneOffset.UTC).minus(3, ChronoUnit.YEARS).toInstant();
java.time.Instant res11 = 2013-10-07T01:02:56.361Z
Run Code Online (Sandbox Code Playgroud)

我很好奇为什么Instant不支持YEARS.开发人员是否放弃了它?

(在我的实际代码中,我试图减去a,Period.ofYears(3)但引用的Instant方法最终被调用).

java openjdk java-8

32
推荐指数
2
解决办法
6050
查看次数

由于新的文件夹结构,在Linux上的Intellij IDEA中正确设置Java 9作为SDK

在你写下我之前,请考虑这些都不是我的问题的答案:


在IntelliJ IDEA 2017.2.6中,尝试将JDK9作为SDK添加但不起作用,因为类路径最终为空.重现步骤:

  1. 打开"添加新SDK对话框"
    (转到项目设置>项目>项目SDK>新建> JDK)
  2. 选择JDK 9
    选择jdk对话框
  3. 通过,但如果您在SDK下查看> JDK9类路径为空,并且由于找不到基类而导致代码错误.见图:
    没有类路径

在IntelliJ IDEA 2017.3 EAP中,您收到有关未找到JDK类的错误.见下图:

  1. 打开"添加新SDK对话框"
    (转到项目设置>项目>项目SDK>新建> JDK)
  2. 选择JDK 9
    选择jdk对话框
  3. 应该通过,但会产生错误弹出窗口
    jdk错误弹出窗口

使用jdk9的HelloWorld示例的命令行编译按预期工作.

编辑:发现几乎重复:Intellij IDEA 2017.2无法在Linux Mint 18上添加openjk 9.主要差异:

  • Linux版本:他们使用Mint 18,我正在使用Debian Stretch.
  • OpenJDK是写作时回购的最新版本:9~b181-4~bpo9 + 1.即使是相同的版本,它仍然不适用于我的情况.

编辑:另一个可能的重复:intellij想法没有看到Java 9标准类

我不明白这些评论的答案.尝试为JDK(9和1.9)设置不同的名称,但它仍然没有显示模块而不是类路径,类路径仍为空.

java openjdk intellij-idea java-9

29
推荐指数
2
解决办法
6996
查看次数

仅使用JRE生成javadoc

我希望能够为我的maven项目生成javadoc,即使在JRE而不是JDK下运行时,也可以找到maven调用的javadoc命令.换句话说,除了JRE中的内容以及Maven可以下载并用作工件之外,不依赖于任何东西.

有没有简单的方法可以使用Maven生成javadocs而无需使用仅在JDK中找到的代码?


编辑:显然,理解我为什么要这样做很重要.我们是一个规模较大的组织中的一个小团队,每年都会发布我们的产品套件,然后我们的客户在方便的时候进行升级(由于部署规模庞大而且价格昂贵且时间要求很高,因此通常会跳过一个或多个版本)我们的生活是能够在有关客户正在运行的任何版本的现有部署的短时间内提供错误修正和新功能.作为一个例子,我最近为我五年前写的一个组件做了一个错误修正,从那以后基本上没有被触及.

因此,我们的构建过程的长期稳定性对我们来说非常重要,并且能够在新版本的Java可用时使用它们.我们已将完整的构建环境迁移到Maven - 它在Maven Central购买永久冻结的工件 - 现在我们开始考虑我们还需要做什么.

随着最近宣布未来版本的javac将不支持旧目标(http://openjdk.java.net/jeps/182),我们得出结论,我们的长期目标是最小化我们对底层Java环境的依赖性,最好是只是普通的JRE.我们正在使用可从Maven Central获得的Eclipse编译器从JDK中完全替换javac,现在我们来看看javadoc生成.

java openjdk javadoc

27
推荐指数
2
解决办法
2890
查看次数

Sun Java是否真的需要在Ubuntu 10.10上使用Android SDK?我更喜欢OpenJDK

我更愿意使用openjdk-6-jdk(版本6b20-1.9.1-1ubuntu3).但我刚刚开始安装Android SDK,所以如果真的需要Sun(Oracle)Java,我想现在是时候安装了它.有什么建议?

java openjdk android

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

Intellij IDEA字体在linux中平滑

我在Arch Linux上使用IntelliJ IDEA和KDE.OpenJDK版本是1.7.0_40.

整个IDE字体(包括代码编辑器)在没有任何抗锯齿和字体平滑的情况下呈现.我在idea.properties文件中idea.use.default.antialiasing.in.editor设置true,并在_JAVA_OPTIONS变量中添加-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true没有任何影响.

还有什么我可以尝试启用字体平滑?

openjdk intellij-idea font-smoothing

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

使用在Android Studio中捆绑的JDK作为Mac上的JAVA_HOME

我试图打开Android设备监视器,工作室向我展示了这条消息= -O: 需要安装Java SE 6运行时错误

它让我感到惊讶,因为如果我没有安装任何Java,我怎么能够开发Android应用程序?!实际上,Android Studio附带了捆绑的JDK/JRE(位于/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home),但系统找不到它:执行usr/libexec/java_home给出

Unable to find any JVMs matching version "(null)".
No Java runtime present, try --request to install.
Run Code Online (Sandbox Code Playgroud)

设置$JAVA_HOME/Applications/Android Studio.app/Contents/jre/jdk/Contents/Home没有帮助- source .bash_profile不喜欢,这是一个目录.

问题:如果我已经在Android Studio中安装了JDK,我不想安装新的JDK.如何将其设置为系统默认值?

macos openjdk java-home android-studio

24
推荐指数
6
解决办法
8470
查看次数

我在哪里可以找到JDK 8/JavaFX 8源代码?

我想重写FXMLLoaderJDK 8 的实现并重新编译.

哪里可以找到JDK8/JavaFX 8的源代码?

openjdk javafx java-8 javafx-8

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

为什么LinkedBlockingQueue#poll()可能挂断?

这是我的代码:

// in constructor
BlockingQueue<Node> queue = new LinkedBlockingQueue<Node>();
// later in another thread
Node node = queue.poll(1, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)

通常它可以工作,但有时候,在某些情况下(仍然不知道何时和为什么)poll()方法不会返回NULL但是将其线程WAITING永远保持在状态.为什么以及如何发生这种情况?

我试过ArrayBlockingQueue- 效果相同.我在Mac OS上使用OpenJDK:

java version "1.7.0_05" 
Java(TM) SE Runtime Environment (build 1.7.0_05-b06)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)

对于Mac OS上的Oracle Java 1.6,相同的代码可以正常工作.这是线程卡住的地方:

sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:834)
java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireInterruptibly(AbstractQueuedSynchronizer.java:894)
java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1221)
java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:340)
java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:462)
Run Code Online (Sandbox Code Playgroud)

有趣的是,当我interrupt()这个线程并poll()再次尝试时,我立即达到相同的情况.

java concurrency openjdk multithreading

21
推荐指数
1
解决办法
2902
查看次数