我想要实现的目标
将服务器绑定到临时端口以进行单元测试.
我的问题:
使用1.5.0_22 JDK我尝试使用端口0根据javadoc绑定临时端口上的InetSocketAddress,但是我找不到地址对象的方法来知道它绑定到哪个端口,所以我不能拥有我的客户端相应配置:
InetSocketAddress address = new InetSocketAddress(0);
assertThat(address.isUnresolved(), is(false));
assertThat(address.getPort(), is(0));
Run Code Online (Sandbox Code Playgroud)
我可能无法正确理解javadoc语句:
有效端口值介于0和65535之间.端口号为零将使系统在绑定操作中获取临时端口.
但是,即使让我的服务器监听套接字后检查端口(我假设绑定已经发生)也不会返回除0以外的任何内容(以下使用http://simpleweb.sourceforge.net/库):
Container httpServer = new Container() {
public void handle(Request req, Response resp) {
}
};
SocketConnection connection = new SocketConnection(httpServer);
InetSocketAddress address = new InetSocketAddress(0);
connection.connect(address);
assertThat(address.isUnresolved(), is(false));
assertThat(address.getPort(), is(0));
Run Code Online (Sandbox Code Playgroud)
使用nmap我甚至看不到绑定端口,所以我假设我的理解是不正确的.有帮助吗?
我刚才正在查看代码教程,并发现了一些有趣的东西 - import static
JDK 5中引入的功能:
import static org.junit.Assert.assertEquals;
public class AdditionTest {
private int x = 1;
private int y = 1;
@Test public void addition() {
int z = x + y;
assertEquals(2, z);
/* ^ this is a static method, normally called by Assert.assertEquals */
}
}
Run Code Online (Sandbox Code Playgroud)
它让我想知道,JDK 5和6中引入了哪些其他功能我不知道?还有其他新的关键字用法吗?任何值得注意的新库类或函数?
我知道那里有发行说明或更改日志,我不是在寻找"RTFM"的答案.我想知道一个简短的列表,在您看来,您认为哪些功能在JDK 5或6中最具游戏规则.
将旧 jdk (1.5) 的Java 代码迁移到更新的 Java 版本(1.8) 以提供其新功能和改进的最佳方法是什么。我们有一个很大的 Java jdk 5 代码库,想迁移到 jdk 8。
有很多的编译器警告和提示(例如diamond operator
,multicatch
,unnecessary (un)boxing
等),这将提高性能,代码的可读性,等等。
我们正在使用 Netbeans IDE。是否有我们可以使用的插件或有迁移脚本?
我在IntelliJ的想法8.1.1上写了一个java项目.当我去编译IntelliJ IDEA 8.1.1的选项时,它会显示弹出消息框,因为它显示错误 -
无法确定JDK
Update JDK配置的版本 .
即使我有正确的JDK版本,我在我的PC上安装了jdk1.5.0,可以正常使用其他环境.请建议我可能需要更改的任何设置.
我用netbeans开发了一个java应用程序.它使用了jdk 1.6.
它工作正常.
但现在需要的是我需要从没有netbeans的另一台机器中的.java文件构建应用程序的jar,并使用jdk 1.5.我无法将该机器升级到jdk 1.6.
有什么办法可以让我的java文件在jdk 1.5机器上编译和工作,可能对我的源代码进行了很小的改动.
错误是javk.swing.grouplayout在jdk 1.5中不可用
请帮忙...
我找不到一个 jdk 安装程序的版本。我可以直接将 jdk 安装文件夹从另一台计算机复制到我的而不安装它吗?
我有一些代码:
import javax.activation.MimetypesFileTypeMap;
...
..
.
String filename = "foo.xls"; // Where this can be any file name .doc, .pdf or whatever
String headerContentType = new MimetypesFileTypeMap().getContentType(filename);
Run Code Online (Sandbox Code Playgroud)
似乎javax.activation.MimetypesFileTypeMap类里面rt.jar
有JRE系统库(jdk1.6.0_10)但不是jdk1.5.0
我想避免使用1.6库.谁知道一个简单快捷的选择?
JDK 6中是否存在早期版本中不存在的问题?我有兴趣在Timestamp.valueOf()的工作方式中找到一些令人惊讶的变化,如下面的变化.
Timestamp.valueOf(),提供时间戳,其中包含带有单个数字的日期或月份.例如.2009-9-20,2009-9-3,2009-12-4等,在JDK 6中表现不同 - 它抛出IllegalArgumentException,表示时间戳格式不正确.而JDK 5(和早期版本)工作得很好,提供正确的值,前缀为那些单个数字的'0'.
JDK 6只是更严格,因为该方法确实认为它的参数是JDBC时间戳转义格式的String.但是,这个BREAKS代码用JDK 5编写.
代码如:
String s = "2009-9-1 00:00:00";
Timestamp t = Timestamp.valueOf(s);
Run Code Online (Sandbox Code Playgroud)
然而,JDK 6很好,小时,分钟,秒为单位数.通过查看JDK 6中Timestamp类的源代码,我发现了什么是错的.我找到了一个数组intDate [],它被初始化为{4,2,2},并且根据这个来检查日期中每个项目的长度阵列.
现在为什么时间部分工作正常,即使它们有单个数字?因为检查长度与等效数组intTime []的代码在源中被注释掉了.
JDK 5中的Timestamp类没有任何这些检查,并且可以正常使用这些输入.
我没有在官方网站的任何地方找到这样的奇怪之处.虽然我发现另一个人有同样的问题.这个问题很容易解决,我有兴趣找到JDK 6中发生的其他奇怪的变化.
我的理解是在1.5中添加了callable,并且runnable接口保持原样以防止世界结束.为什么我不能实例化- 为什么队列必须只运行runnable?在内部,如果我要提交,invokeAll,invokeAny callables,这应该没问题吧?还会返回一个callables列表吗?ThreadPoolExecutor
(core, max, tu, unit, new BlockingQueue<Callable>())
shutDownNow()
POM包含(如/sf/answers/1567929891/中所述):
<profile>
<id>compileWithJava5</id>
<!--
NOTE
Make sure to set the environment variable JAVA5_HOME
to your JDK 1.5 HOME when using this profile.
-->
<properties>
<java.5.home>${env.JAVA5_HOME}</java.5.home>
<java.5.libs>${java.5.home}/jre/lib</java.5.libs>
<java.5.bootclasspath>${java.5.libs}/rt.jar${path.separator}${java.5.libs}/jce.jar</java.5.bootclasspath>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<compilerArguments>
<bootclasspath>${java.5.bootclasspath}</bootclasspath>
</compilerArguments>
</configuration>
</plugin>
</plugins>
</build>
</profile>
Run Code Online (Sandbox Code Playgroud)
$JAVA5_HOME
设置:
• echo $JAVA5_HOME
/usr/lib/jvm/jdk1.5.0_22
Run Code Online (Sandbox Code Playgroud)
据我所知,Java + Maven的神奇之处在于,它应该是maven-compiler-plugin
指示JDK 1.8伪装成JDK 1.5并使用Java 5引导类路径的有效咒语.
根据为什么javac在@Override注释上失败,JDK 1.5将不允许接口的已 …