对于在Windows 7上从Java 6迁移到Java 7运行时的迁移项目,我们希望得到以下情况:
我们发现许多使用该路径来实现这种情况的解决方案,但我们正在寻找一种保持默认路径的方法(使用C:\ Windows\System中的java.exe).不幸的是,将注册表项\ HKLM\SOFTWARE\Wow6432\JavaSoft\Java Runtime Environment\CurrentVersion更改为1.6不起作用.
有没有人有这样的设置经验?
编辑: 我有很多问题为什么我们想要这个.我可以讨论所有的细节,但请从我这里了解我们讨论了所有可能的情况,这是影响我们业务的最少的情况.涉及超过10K系统(笔记本电脑+台式机)以及许多不同的Applet,webstart应用程序和独立客户端应用程序.
KeychainStore Ignored Exception: java.security.cert.CertificateParsingException: java.io.IOException: Duplicate extensions not allowed
Run Code Online (Sandbox Code Playgroud)
我用 Java 7 编写了一个桌面应用程序,可以在 Windows 和 OS/X 上运行。我们的用户都在他们的计算机上安装了一个特殊的证书,进入各自的本地密钥库。德国有一个mac book用户,他的客户端尝试访问KeychainStore时收到上述错误信息。有没有人见过这样的事情?它在我的 macbook 和所有 Windows 客户端上运行良好。只是他的机器有这个问题,我不明白。我通过让他在浏览器中访问 Web 服务来验证他的证书没有问题。
我正在使用tomcat7-maven-plugin2.2从命令行运行webapp(我在Windows 8.1,Java 1.7.0_51和Maven 3.2.1).
这是配置(非常简单,我猜):
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<address>localhost</address>
<port>8080</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我运行Maven mvn tomcat7:run并且它正确启动,服务器启动,webapp加载,我可以与它进行交互.
我运行Maven的命令提示符正忙着显示Tomcat输出(这看起来很好):
[INFO] Scanning for projects...
[INFO]
[INFO] Using the builder org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder with a thread count of 1
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building <project-name-here> 0.3
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> tomcat7-maven-plugin:2.2:run (default-cli) @ <project-name-here> >>>
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ <project-name-here> ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 25 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile …Run Code Online (Sandbox Code Playgroud) 首先,我安装了jdk 1.6.0_43和oracle weblogic 12.1.1,我成功地部署了我的应用程序.
然后我升级了我的jdk(1.7.0_60)和weblogic(12.1.2),但无法部署我的应用程序.
现在,我降级了我的weblogic(12.1.1)但保留了我的jdk 1.7.0_60,但我仍然无法成功部署我的应用程序.
在两种故障情况下,我都收到了同样的错误消息.有没有关于java 7的东西我应该注意什么?我试着寻找这个,但是徒劳无功..
[exec] javax.naming.CommunicationException [Root exception is java.net.ConnectException: t3://localhost:9991: Destination unreachable; nested exception is:
[exec] java.net.ConnectException: Connection refused: connect; No available router to destination]
Run Code Online (Sandbox Code Playgroud) 有没有人知道将Java 8代码(源代码级)转换为使用匿名内部类的Java 7代码中的lambda和方法引用的任何工具?我知道Retrolambda,但它适用于字节码级别,而不是源级别.
现在,我有一个工作版本作为IntelliJ插件.我扩展了当前的IntelliJ代码,一次转换包中的所有lambda,而不是单独选择每个lambda并转换为匿名内部类.这种方法的问题在于它无法作为一个独立的工具工作,比如一个maven插件,因为它需要一个IntelliJ上下文才能工作.
编辑:请注意,重点是将lamda /方法引用转换为匿名内部类.我并不担心Java 8中的API更改会被Java 7编译器捕获并报告为编译错误.
我想编写一个java框架,它支持JRE7作为基线,但JRE8如果在JRE8(向上兼容??)的上下文中运行,则可以利用这些功能.
(或者我可能倒退了......即JRE8是基线,但是优雅降级以支持JRE7).
Java是否提供了这样做的方法?
我以为我可以用类似于javascript特征检测的方式解决这个问题,我可以通过编程方式测试我的Java8方法的存在,如果它以编程方式调用它,否则回退到Java7库.
IMO这是一个非常艰巨的方法.如果这个"特征切换/检测"可以由Java Runtime Environment/ 处理,那就太棒了Java Compiler.这可能吗,还是我服用疯狂药?
免责声明:我没有解决编译,这将排除此解决方案的有用性(如果我编译Java7,我不能添加-parameters到编译的类).
public class Index {
void tellme(String yourname) {
/* ... */
}
public static void main(String[] args) throws Exception {
Method tellme = Index.class.getDeclaredMethod("tellme", String.class);
Method java8Params = null;
try {
java8Params = Method.class.getMethod("getParameters");
} catch (NoSuchMethodException t) { /* ignore */ } …Run Code Online (Sandbox Code Playgroud) 我正在编写一个JMeter测试计划来连接到SSL端口(Tomcat Connector).当使用JDK8(1.8.0_51)上的三个JMeter SSL客户端实现(HttpClient4,HttpClient3.1,Java)中的任何一个连接到SSL端口时,我收到SSLHandshakeException(handshake_failure).如果我使用JDK7(1.7.0_75) - 一切都按预期工作.
Client JDK: HotSpot 1.8.0_51
Client OS: Mac OSX 10.10.2
JMeter version: 2.13
Server: Tomcat 7.0.63 (latest)
Server SSL CipherSuite: RC4-SHA
Server SSL Protocol: all
Server Java: OpenJDK 1.7.0_79
Run Code Online (Sandbox Code Playgroud)
以下是我已经尝试过的一些事情:
(1)我尝试更换JCE Unlimited Strength JAR,如同类似问题所示: 连接到https站点时出现SSLHandshakeException
没有更改错误消息或日志文件,JDK8客户端将无法连接到SSL服务器.
(2)我打开了调试,如下所述:https://blogs.oracle.com/java-platform-group/entry/diagnosing_tls_ssl_and_https.JVM_ARGS设置为启动JMeter -Djavax.net.debug=ssl:handshake:verbose.日志文件(附在下面)没有提示任何原因可能是什么问题.
(3)我尝试指定HTTPS协议,例如-Dhttps.protocols=SSLv3.没运气.SSLv3已禁用或密码不匹配:
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
(4)我试过禁用SNI,例如-Djsse.enableSNIExtension=false.也没有运气.
所以,我现在被迫使用JDK7,直到我可以让我的JMeter与JDK8一起运行,我想解决这个问题.
因此,问题在于JDK8如何处理SSL客户端与JDK7的不同.此外,服务器(Tomcat连接器)需要支持适当的密码和协议,但现在这是我无法控制的.
以下是相关日志:
X509KeyManager passed …Run Code Online (Sandbox Code Playgroud) 今天我在Java中遇到了一个奇怪的场景.我在我的方法中有一个try..catch块,它没有任何throws子句,我能够抛出catch块中捕获的异常对象.它是Exception类的对象,因此它不是未经检查的异常.此外,如果出现异常,它不会打印堆栈跟踪,而是异常被吞没.
下面是我的代码示例,
public class ExceptionTest {
public void test() {
try
{
// Some code which may throw exception.
}
catch(Exception ex)
{
// Compiler should ask me to have a *throws Exception* in the signature, when I am throwing an exception object.
throw ex;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我抛出一个新的异常对象而不是捕获的异常对象,编译器会要求我在方法签名中有一个throws子句.
注意:在Java 7或8中运行时,我遇到了这种情况.
我想知道,抛出的物体在哪里?有任何想法的人请...
使用迭代器迭代ArrayList时从ArrayList中删除多个项是否安全?
Iterator<String> iterator = nameList.iterator();
while(iterator.hasNext()){
String s = iterator.next();
List<String> list = work(s);
for (String s1 : list) {
nameList.remove(s1);
}
}
Run Code Online (Sandbox Code Playgroud)
该work()方法返回在while循环的运行时期间应从nameList中删除的名称列表.
我有一个模块,必须检查特定目录的新文件(Create).该文件将由另一个我无法控制或可见的系统创建.
我使用了Java WatchService API,当创建新文件时,我能够获得事件ENTRY_CREATE.下面是代码.
WatchService watchService = FileSystems.getDefault().newWatchService();
Path path = Paths.get(dirLocation);
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE);
WatchKey key;
while ((key = watchService.take()) != null) {
for (WatchEvent<?> event : key.pollEvents()) {
if ("ENTRY_CREATE".equalsIgnoreCase(event.kind().name())) {
// File reading here
}
Run Code Online (Sandbox Code Playgroud)
问题是在尝试读取新文件的某个时候,我正在获取空内容而没有任何异常.搜索Google和SO,我发现如果文件写入不完整,可能会发生这种情况.为了解决这个问题,我尝试了随机访问文件,锁定并创建了FileOutputStream,但没有运气,我得到了空的内容,没有任何例外.最后我尝试了下面的工作.但我担心的是,这必须在单独的线程内部进行检查,以便不阻塞WatchService事件,并且线程数量可以随着文件数量的增长而增长,也可能是更昂贵的操作.
closed = file.renameTo(file);
Run Code Online (Sandbox Code Playgroud)
有没有其他有效的方法来检查文件写入操作是否完成?或者是否有任何API可以处理这个?