我最近在我的一个项目中转向了Java 7.我声称它可以在Java 1.5上运行,因为我在Java 6或7中没有依赖它.但是在今天编译时我注意到了这一点:
bootstrap class path not set in conjunction with -source 1.5
Run Code Online (Sandbox Code Playgroud)
谷歌发现这个警告的信息很少.这是否意味着您无法从Java 1.7编译为Java 1.5?
查看一些代码,我遇到了以下代码
trTuDocPackTypdBd.update(TrTuDocPackTypeDto.class.cast(packDto));
Run Code Online (Sandbox Code Playgroud)
我想知道这种方式是否有任何优势
trTuDocPackTypdBd.update((TrTuDocPackTypeDto)packDto);
Run Code Online (Sandbox Code Playgroud)
我问开发人员负责,他说他使用它是因为它是新的(这对我来说似乎不是一个特别好的理由),但是当我想要使用这种方法时我很感兴趣.
我试图使用java 5删除一个jar文件(因此Java 7中引入的Paths API不是一个选项).
我的代码:
String sep = File.separator;
File test = new File("."+ sep + "server" + sep + "lib" + sep + "testJar.jar");
if(test.delete())
{
logger.log(Level.INFO,test.getName() + " deleted.");
}
else
{
logger.log(Level.INFO,"Delete operation is failed for "+test.getName());
}
Run Code Online (Sandbox Code Playgroud)
当我的代码被执行时,jar文件被删除但是Delete operation is failed for testJar.jar被打印在logs.Cant中了解原因.感谢任何帮助.
更新:
我再次尝试相同的代码,这次它说testJar.jar deleted 现在我很困惑发生了什么
我的问题相当简单.如果网络连接丢失,我的程序需要立即通知.我正在使用Java 5,所以我无法使用NetworkInterface的非常方便的功能.
目前我有两种不同的检查网络连接的方法:(
try ..catches removed)
方法一:
URL url = new URL("http://www.google.com");
HttpURLConnection urlConnect = (HttpURLConnection) url.openConnection();
// trying to retrieve data from the source. If offline, this line will fail:
Object objData = urlConnect.getContent();
return true;
Run Code Online (Sandbox Code Playgroud)
方法2:
Socket socket = new Socket("www.google.com", 80);
netAccess = socket.isConnected();
socket.close();
return netAccess;
Run Code Online (Sandbox Code Playgroud)
但是,这两种方法都会阻塞,直到达到超时,然后才返回false.我需要一个立即返回的方法,但与Java 5兼容.
谢谢!
编辑:我忘了提到我的程序依赖于IP地址,而不是DNS名称.因此在解析主机时检查错误...
第二次编辑:
使用NetworkInterface找出最终解决方案:
Enumeration<NetworkInterface> eni = NetworkInterface.getNetworkInterfaces();
while(eni.hasMoreElements()) {
Enumeration<InetAddress> eia = eni.nextElement().getInetAddresses();
while(eia.hasMoreElements()) {
InetAddress ia = eia.nextElement();
if (!ia.isAnyLocalAddress() && !ia.isLoopbackAddress() …Run Code Online (Sandbox Code Playgroud) 我正在读关于Console课程,在第一行,它是写的
Java 6的新手,当我们
Java SE 6从命令行运行时,我们通常使用控制台类对象
那么,这意味着我们通过命令行隐式使用控制台类?
然后,我开始寻找有关Console类的更多细节,我在java和Console链接中找到了来自控制台类的Input.所以,总结了一些观点
- 控制台类只能在IDE之外使用
System.console().readLine();Consoleclass 从控制台读取密码或密码,并使用回显禁用readPassword()
虽然,我们有Scanner类和BufferedReader类来从控制台读取输入,并且是在早期添加的Java 5.那么,仅仅因为安全原因Console类被添加了Java 6?或者是否有其他优势可以使用本课程.
有人可以分享更多关于Console课程的细节吗
我目前正在玩Java 1.5中的内省和注释.有一个父抽象类AbstractClass.继承的类可以具有使用自定义@ChildAttribute批注进行批注的属性(类型为ChildClass).
我想编写一个通用方法,列出实例的所有@ChildAttribute属性.
到目前为止,这是我的代码.
父类:
public abstract class AbstractClass {
/** List child attributes (via introspection) */
public final Collection<ChildrenClass> getChildren() {
// Init result
ArrayList<ChildrenClass> result = new ArrayList<ChildrenClass>();
// Loop on fields of current instance
for (Field field : this.getClass().getDeclaredFields()) {
// Is it annotated with @ChildAttribute ?
if (field.getAnnotation(ChildAttribute.class) != null) {
result.add((ChildClass) field.get(this));
}
} // End of loop on fields
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
具有一些子属性的测试实现
public class …Run Code Online (Sandbox Code Playgroud) 我想打包一段绝对必须在Java 1.5上运行的代码.如果VM是1.6 VM,则代码的一部分可以"增强"程序.
基本上这是这个方法:
private long[] findDeadlockedThreads() {
// JDK 1.5 only supports the findMonitorDeadlockedThreads()
// method, so you need to comment out the following three lines
if (mbean.isSynchronizerUsageSupported())
return mbean.findDeadlockedThreads();
else
return mbean.findMonitorDeadlockedThreads();
}
Run Code Online (Sandbox Code Playgroud)
什么是最简单的方法在1.5上进行编译,然后在1.6时进行1.6方法调用?
在过去,我通过编译一个独特的1.6类来做类似的事情,我将使用我的应用程序打包并在1.6上使用ClassLoader实例化(因为1.6 JVM非常适合混合0x32和0x31类),但我认为这是一个有点矫枉过正(有点痛苦,因为在构建过程中你必须构建0x31和0x32 .class文件).
如果我想在1.5上编译上述方法,我该怎么办?也许使用反射然后如何(我根本不熟悉反射)
注意:如果你很好奇,上面的方法来自这篇文章:http://www.javaspecialists.eu/archive/Issue130.html
(但我不想像在文章中那样"评论三行",我希望它能在1.5和1.6上编译并运行)
我们的情况是,我们的Spring连接了一些包含使用Java 6构建的ActiveMQ类的bean.我们的应用程序在客户的服务器上运行,因此我们无法保证它们安装了Java 6或更高版本.如果它们恰好具有Java 5,则应用程序无法启动,因为BeanCreationException具有依赖于ActiveMQ的类的s(根本原因是a UnsupportedClassVersionError).
所以我的问题是,有没有办法忽略a BeanCreationException仍然启动应用程序?我希望能够显示一条错误消息,说明他们需要安装Java 6或更高版本,但由于应用程序甚至无法启动,我从来没有机会这样做.
我的预感是没有办法做到这一点,因为Spring需要能够保证我的应用程序在初始化后正确构建,但我想我还是会问.关于如何实现我的最终目标的任何其他建议也将有所帮助和赞赏.
我们正在使用Spring 3.0.6
谢谢!
我想在我们的代码库中添加一些自定义断言,以正确隐藏故障跟踪.我知道如何编写一个可以静态导入的公共静态方法.我知道如何重用旧的断言或抛出新的断言AssertionError.
我无法弄清楚如何做的是将新的自定义断言保留在Failure Trace之外.我们已经习惯了故障跟踪中的第一个命中,而不是断言代码本身,而是调用断言的测试代码.
我知道有一个filtertrace控制过滤堆栈的属性,但我找不到任何关于将新断言添加到过滤器所需要做的好文档.
我想做的一个例子:
package testassertions;
import static newassertions.MyAssertions.myAssertTrue;
import org.junit.Test;
public class ExampleTest {
@Test
public void myAssertTruePassing() { myAssertTrue(true); }
@Test
public void myAssertTrueFailing() { myAssertTrue(false); }
}
Run Code Online (Sandbox Code Playgroud)
package newassertions;
import static org.junit.Assert.assertTrue;
public class MyAssertions {
public static void myAssertTrue(boolean b) {
assertTrue(b);
}
}
Run Code Online (Sandbox Code Playgroud)
myAssertTrueFailing()的失败跟踪显示:
java.lang.AssertionError
at newassertions.MyAssertions.myAssertTrue(MyAssertions.java:8)
at testassertions.ExampleTest.myAssertTrueFailing(ExampleTest.java:12)
Run Code Online (Sandbox Code Playgroud)
我需要它只显示:
java.lang.AssertionError
at testassertions.ExampleTest.myAssertTrueFailing(ExampleTest.java:12)
Run Code Online (Sandbox Code Playgroud) 有人可以建议我如何在Java Swing中实现弹出窗口.我希望弹出窗口是一个模态窗口(弹出窗口打开时用户无法返回主窗口).
我尝试使用JDialog,但它只允许一个小部件用于用户输入,而我需要多个小部件.我可能在这里错了,但这是我能够做到的.
感谢您的帮助.