Tag: java 7

Java 7中简化的Varargs方法调用

在Java 7中,您可以选择放置@SafeVarargs注释来抑制在使用不可重新生成的varargs参数编译方法时获得的警告。 Project Coin的提议规定,当方法确保只有与varargs参数相同类型的元素存储在varargs数组中时,才应使用注释。 什么是非安全方法的例子?

为什么不能在匿名内部类上使用菱形推断类型?

在Java 7及更高版本中,菱形可用于正常推断类型,因此没有问题: List list = new ArrayList(); 但是,对于像这样的匿名内部类,它不能: List st = new List() { //Doesn’t compile //Implementation here } 为什么是这样? 从逻辑上讲,在这种情况下,我绝对可以将类型推断为String 。 这个决定的逻辑原因是,在匿名内部类中实际上不能推断出类型,还是由于其他原因而省略了?

为什么收集文字?

从Java 7上的各种在线文章中我已经知道Java 7将具有如下所示的集合文字1 : List fruits = [ “Apple”, “Mango”, “Guava” ]; Set flowers = { “Rose”, “Daisy”, “Chrysanthemum” }; Map hindiNums = { 1 : “Ek”, 2 : “Do”, 3 : “Teen” }; 我的问题是: 难道不可能在所有集合类中提供可以如下使用的静态方法: List fruits = ArrayList.of(“Apple”, “Mango”, “Guava”); IMO看起来和文字版本一样好,而且也相当简洁。 那为什么他们必须发明一种新的语法( 编辑: ‘新’我的意思是’新的Java’。)? 当我说List fruits = [ “Apple”, “Mango”, “Guava” ]; 我真正得到什么List […]

java.lang.NoClassDefFoundError:sun / swing / plaf / synth / SynthUI

我正在使用Seaglass Look and Feel来获取我的Java Swings代码。 但我一直收到这个错误。 Exception in thread “main” java.lang.NoClassDefFoundError: sun/swing/plaf/synth/SynthUI at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:800) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:278) at javax.swing.SwingUtilities.loadSystemClass(SwingUtilities.java:1873) at javax.swing.UIDefaults.getUIClass(UIDefaults.java:686) at javax.swing.UIDefaults.getUI(UIDefaults.java:758) at javax.swing.UIManager.getUI(UIManager.java:1013) at javax.swing.JRootPane.updateUI(JRootPane.java:483) at javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1230) […]

我应该如何使用AsynchronousServerSocketChannel接受连接?

我想用Java 7和NIO 2编写一个异步服务器。 但是我应该如何使用AsynchronousServerSocketChannel ? 例如,如果我开始: final AsynchronousServerSocketChannel server = AsynchronousServerSocketChannel.open().bind( new InetSocketAddress(port)); 然后,当我执行server.accept() ,程序终止,因为该调用是异步的 。 如果我将该代码放在无限循环中,则抛出AcceptPendingException 。 有关如何使用AsynchronousServerSocketChannel编写简单异步服务器的任何建议? 这是我的完整示例(类似于JavaDoc中的示例): import java.io.IOException; import java.net.InetSocketAddress; import java.nio.channels.AsynchronousServerSocketChannel; import java.nio.channels.AsynchronousSocketChannel; import java.nio.channels.CompletionHandler; public class AsyncServer { public static void main(String[] args) { int port = 8060; try { final AsynchronousServerSocketChannel server = AsynchronousServerSocketChannel.open().bind( new InetSocketAddress(port)); System.out.println(“Server listening […]

Java 8支持TLS 1.2,但Java 7不支持

当我尝试使用Java 7连接URL(支持TLS 1.2的供应商URL之一,之前在Java 7中工作正常)时,我发现了以下exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1943) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1059) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1321) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1305) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:523) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1087) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) 所以我启用了-Dhttps.protocols=TLSv1.2 , -Djavax.net.ssl.trustStore=和-Djavax.net.ssl.trustStorePassword= 之后我也遇到了同样的问题。 然后我将Java版本升级到8,以便它可以连接到URL而不会出现任何SSL问题。 根据这篇博客 ,在Java 8中,TLS 1.2是默认的,TLS 1.2可以使用Java 7中的属性-Dhttps.protocols进行调整。在Java 7中,如果我启用了上面的属性,我可以无问题地访问URL通过我过去的经验。 但是对于URL,我被要求升级Java版本。 上面提到的Java 7中的Exception可能导致哪些供应商方面的更改? 如果没有升级Java 8,我无法访问URL? 当尝试-Djavax.net.debug=all我得到了以下日志 Ignoring unavailable cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA Ignoring […]

无法使用最新的JDK(1.7.0_45)访问新netbeans 7.4上的synthetica主题

今天我更新了我的Netbeans 6.8到新的Netbeans 7.4和JDK 1.7.0到1.7.0_45当我在新的Netbeans版本上打开我以前的项目sysnthetica look and feel不起作用:(其他一切都很完美:) try { UIManager.setLookAndFeel(new SyntheticaBlackStarLookAndFeel()); new frm_login().setVisible(true); } catch (Exception e) { e.printStackTrace(); } 这是错误: Exception in thread “main” java.lang.NoClassDefFoundError: sun/swing/plaf/synth/SynthUI at de.javasoft.plaf.synthetica.SyntheticaDefaultLookup.getDefault(SyntheticaDefaultLookup.java:84) at sun.swing.DefaultLookup.get(DefaultLookup.java:125) at javax.swing.plaf.basic.BasicButtonListener.getInputMap(BasicButtonListener.java:119) at javax.swing.plaf.basic.BasicButtonListener.installKeyboardActions(BasicButtonListener.java:95) at javax.swing.plaf.basic.BasicButtonUI.installKeyboardActions(BasicButtonUI.java:138) at javax.swing.plaf.basic.BasicButtonUI.installUI(BasicButtonUI.java:90) at javax.swing.JComponent.setUI(JComponent.java:664) at javax.swing.AbstractButton.setUI(AbstractButton.java:1807) at javax.swing.JButton.updateUI(JButton.java:146) at javax.swing.AbstractButton.init(AbstractButton.java:2172) at javax.swing.JButton.(JButton.java:136) at javax.swing.JButton.(JButton.java:90) at de.javasoft.plaf.synthetica.SyntheticaLookAndFeel.installCompatibilityDefaults(SyntheticaLookAndFeel.java:553) at de.javasoft.plaf.synthetica.SyntheticaLookAndFeel.access$4(SyntheticaLookAndFeel.java:405) […]

getAudioInputStream()期间标记/重置exception

我发布了一个问题的解决方案(如下所述),但未能确认它是否解决了问题。 有Java 7的人可以尝试使用以下Applet并报告回来吗? 非常感谢。 AudioMixerDemo 报告给我的问题是,需要加载来自jarred资源的声音片段的顶行按钮不起作用。 该错误指向正在读取音频文件的行,并表示正在抛出“标记/重置”I / Oexception。 此代码适用于Java 6不适用于Java 7.违规声明如下: AudioInputStream ais = AudioSystem.getAudioInputStream( AudioMixer.class.getResourceAsStream(fileName)); 内部区域返回一个InputStream ,我认为这就是出现“可标记性”问题的地方。 Oracle的错误数据库报告该问题是向后兼容性问题,但优先级较低。 我已经记录如下: URL url = AudioMixer.class.getResource(fileName); AudioInputStream ais = AudioSystem.getAudioInputStream(url); AudioSystem API中没有提到此方法会抛出“标记/重置”I / Oexception。 所以,我很有希望。 但我无法证实这一点!

JDK 7中generics和三元运算符的编译错误

编写一些Java代码时遇到编译失败,我将其提炼为以下测试用例: import java.util.Collections; import java.util.List; public class TernaryFailure { public static List thisWorks() { return Collections.emptyList(); } public static List thisFailsToCompile() { return true ? Collections.emptyList() : Collections.emptyList(); } } 上面的代码无法使用JDK 1.7.0_45的javac进行编译: $ javac TernaryFailure.java TernaryFailure.java:10: error: incompatible types return true ? Collections.emptyList() : Collections.emptyList(); ^ required: List found: List 1 error 但是,它在JDK 1.8.0_05中编译没有任何错误。 这是Java […]

java.lang.UnsupportedOperationException:’posix:permissions’不支持作为Windows上的初始属性

我正在使用Java 7 File API。 我编写了一个在Ubuntu上完美地创建目录的类,但是当我在Windows上运行相同的代码时,它会抛出错误: Exception in thread “main” java.lang.UnsupportedOperationException: ‘posix:permissions’ not supported as initial attribute at sun.nio.fs.WindowsSecurityDescriptor.fromAttribute(Unknown Source) at sun.nio.fs.WindowsFileSystemProvider.createDirectory(Unknown Source) at java.nio.file.Files.createDirectory(Unknown Source) at java.nio.file.Files.createAndCheckIsDirectory(Unknown Source) at java.nio.file.Files.createDirectories(Unknown Source) at com.cloudspoke.folder_permission.Folder.createFolder(Folder.java:27) at com.cloudspoke.folder_permission.Main.main(Main.java:139) 我的文件夹类代码是 package com.cloudspoke.folder_permission; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.FileAttribute; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.UserPrincipal; import java.util.Set; public class Folder{ […]