我在MacBookPro上使用macOS 10.13.5安装了Eclipse [Version:Photon Release(4.8.0)]和JDK 10当我在我的代码中写入时: import java.awt.*;
我收到错误:
导入java.awt无法解析
是否java.awt包含在JDK 10中?如果是,那里是什么以及如何让Eclipse可见?如果没有,我怎么能添加java.awt?
我正在努力解决这个问题,任何信息将不胜感激。我有一个项目,它已经使用 JAXB 一段时间来从 XML 架构构建 Java 模型并使用该模型。现在它已经在 Java 8 中运行了一些。
但是,我已经升级到 Open JDK 10,当我尝试将 XML 文件解组到 Java 对象中时,出现此错误...
java.lang.IllegalArgumentException: javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.minestar.cat.com/namespace/units",
local:"units"). Expected elements are <{}units>
at minestar.units.schema.parser.UnitsXmlParser.readXml(UnitsXmlParser.java:31)
at minestar.units.javagenerator.JavaGeneratorPlugin.execute(JavaGeneratorPlugin.java:41)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:956)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:290)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:194)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: javax.xml.bind.UnmarshalException: …Run Code Online (Sandbox Code Playgroud) 我正在使用JFreeChart并且我想ToolTip通过创建我自己的Class扩展ChartPanel和覆盖来自定义createToolTip()。
static private class PrivateChartPanel extends ChartPanel{
//constructors
@Override
public JToolTip createToolTip() {
JToolTip jtt = super.createToolTip();
jtt.setBackground(Color.WHITE);
jtt.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1, true));
return jtt;
}
}
Run Code Online (Sandbox Code Playgroud)
问题出在Border。它不是在所有角落都是圆形的。
为什么它不是在所有角落都圆润的,我是怎么做到的?
PS:我新建了一个简单的项目
import java.awt.Color;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class HelloWorld {
public static void main(String[] args) {
JFrame a = new JFrame();
a.setBounds(100, 100, 100, 100);
a.setLayout(null);
JPanel b = new JPanel();
b.setBounds(5, 5, 50, 50);
b.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1, true)); …Run Code Online (Sandbox Code Playgroud) 所以在 Java 8 中如下:
DateTimeFormatter df = DateTimeFormatter.ofPattern("E d MMM yyyy");
Run Code Online (Sandbox Code Playgroud)
当以这种方式应用时:
LocalDate date = LocalDate.now();
date.format(df);
Run Code Online (Sandbox Code Playgroud)
会产生这样的东西:
"Available on Thu 30 Aug 2018"
Run Code Online (Sandbox Code Playgroud)
但是,在 Java 10 中运行时完全相同的代码会产生以下结果:
"Available on Thu. 30 Aug. 2018"
Run Code Online (Sandbox Code Playgroud)
请注意日和月部分之后的句点...
我很清楚我可以只替换字符串中的句点,但我真的不想这样做。我想知道为什么会发生这种变化,是否有替代模式?
我在网上找不到任何有关此更改的参考。
编辑:
根据下面 Basil 的回答,这不是 Java 版本问题。这是语言环境问题。带有我的代码的 docker 映像在美国语言环境中运行,而我的机器在澳大利亚语言环境中运行 :)
我试图理解Java 10局部变量类型推断.我似乎明白它是什么,但我认为没有任何优势.所以我想知道引入这个功能背后的想法是什么.这些是我的一些观察.如果我错了,请纠正我.
例如,(与其他语言不同)我不能只声明这样的变量
var abc;
Run Code Online (Sandbox Code Playgroud)
我需要初始化它(但不能初始化为null).所以我真的没有看到任何优势.
我看到的其他一个参数是先前我们必须使用其显式类型声明这样的变量.
Map<User, String> userChannels = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
现在我可以这样做
var userChannels = new HashMap<User, String>();
Run Code Online (Sandbox Code Playgroud)使用现代IDE(如IntelliJ IDEA)及其对代码完成的支持.我想不出这会带来什么额外的好处(在上面的上下文中).
我读到的其他一些观点是
多态代码与var不一致.
而且我也不能将var用于非可表示类型,如Anonymous类.
鉴于所有这些,为什么有必要引入这个功能?有人可以澄清如果我在这里遗漏了什么.
所以从 Java 9 开始,我们可以使用 var 来声明局部变量:
var s = "cool";
Run Code Online (Sandbox Code Playgroud)
有没有办法在声明字段时使用类似的构造?
class Container {
final var s = "cool"; // does not compile tmk
}
Run Code Online (Sandbox Code Playgroud)
据我所知,似乎不像。
var当您浏览代码并调查乍一看不清楚的代码时,这并不是很少。当开发人员使用非自描述方法名称时,您必须花一些时间来了解变量的真实类型。如果你使用 lombok 的,var你将与 lombok 紧密结合,所以我不会在我的代码中经常使用它
var在 java 中使用的有用用例是什么?
Java的10允许做一个anonymous class有var这样的:
var a1 = new Object(){};
var a2 = new Object(){};
Run Code Online (Sandbox Code Playgroud)
但是这个赋值会抛出一个错误:
a1 = a2;
Run Code Online (Sandbox Code Playgroud)
jshell> a1 = a2; | Error: | incompatible types: $1 cannot be converted to $1 | a1 = a2; | ^^
基于错误日志,为什么不能Java的10分配两个推断varS上anonymous class对方,但它可以为其他类型,如做同样的Long,String等等?
我安装了JDK 10来尝试新功能,var但由于某些原因,我挂了很多电话—尽管JDK已添加到IntelliJ(版本2018.1)中,但以下代码仍无法编译,表示Java无法找到符号var:
public class Variations {
public static void main(String[] args) {
var local = "foo";
System.out.println(local);
}
}
Run Code Online (Sandbox Code Playgroud)
我是否在这里缺少明显的东西,还是应该启用的IntelliJ选项?
编辑:项目和模块的 SDK和语言级别都设置为Java 10安装和lvl。10(虽然不是X - experimental水平)。