我从https://jdk9.java.net下载了java 9 并将其安装在我的Windows 10机器上.
Java 9有jshell,我可以用来评估和学习java编程.
一些示例导入sun包,例如sun.audio.*等等.但是,在jshell中,每次我尝试导入任何sun包时,都会说sun包不存在.
有些应用程序不能与java 9一起使用.也许有不兼容性?
我试图运行我的应用程序使用Java 9.当客户端尝试建立一个EJB连接(前端中的Java Swing开发,服务器与EJB部署在Wildfly 8开发)得到了以下异常:
09:53:42,358 INFO [xnio] XNIO version 3.2.0.Final
09:53:42,465 INFO [nio] XNIO NIO Implementation Version 3.2.0.Final
09:53:42,507 DEBUG [nio] Started channel thread 'Remoting "config-based-naming-client-endpoint" I/O-1', selector sun.nio.ch.WindowsSelectorImpl@4b4a5caf
RmiServiceFactpry ExceptionInInitializerError
java.lang.ExceptionInInitializerError
at org.jboss.ejb.client.remoting.RemotingConnectionEJBReceiver.<init>(RemotingConnectionEJBReceiver.java:148)
at org.jboss.ejb.client.remoting.RemotingConnectionEJBReceiver.<init>(RemotingConnectionEJBReceiver.java:106)
at org.jboss.ejb.client.EJBClientContext.registerConnection(EJBClientContext.java:465)
at org.jboss.naming.remote.client.ejb.RemoteNamingStoreEJBClientHandler.associate(RemoteNamingStoreEJBClientHandler.java:78)
at org.jboss.naming.remote.protocol.v1.RemoteNamingStoreV1.<init>(RemoteNamingStoreV1.java:71)
at org.jboss.naming.remote.protocol.v1.VersionOne.getRemoteNamingStore(VersionOne.java:50)
at org.jboss.naming.remote.protocol.Versions.getRemoteNamingStore(Versions.java:55)
at org.jboss.naming.remote.client.RemoteContextFactory.createVersionedStore(RemoteContextFactory.java:73)
at org.jboss.naming.remote.client.HaRemoteNamingStore.failOverSequence(HaRemoteNamingStore.java:202)
at org.jboss.naming.remote.client.HaRemoteNamingStore.namingStore(HaRemoteNamingStore.java:149)
at org.jboss.naming.remote.client.HaRemoteNamingStore.namingOperation(HaRemoteNamingStore.java:130)
at org.jboss.naming.remote.client.HaRemoteNamingStore.lookup(HaRemoteNamingStore.java:272)
at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:79)
at org.jboss.naming.remote.client.RemoteContext.lookup(RemoteContext.java:83)
at java.naming/javax.naming.InitialContext.lookup(Unknown Source)
at com.dataloy.client.core.RmiServiceFactory.createRemote(RmiServiceFactory.java:105)
at com.dataloy.client.core.RmiServiceFactory.getServiceImpl(RmiServiceFactory.java:96)
at com.dataloy.core.AbstractServiceFactory.getService(AbstractServiceFactory.java:58)
at com.dataloy.DataloyEngine.getService(DataloyEngine.java:198)
at com.dataloy.DataloyEngine.login(DataloyEngine.java:548)
at com.dataloy.client.login.LoginPanel.doLogin(LoginPanel.java:511)
at com.dataloy.client.login.LoginPanel.access$500(LoginPanel.java:56)
at com.dataloy.client.login.LoginPanel$5.run(LoginPanel.java:452)
Caused …Run Code Online (Sandbox Code Playgroud) 为什么我的jshell实例(JDK Version 9-ea)无法识别printf()语句?以下是我观察到的错误,
jshell> printf("Print number one - %d",1)
| Error:
| cannot find symbol
| symbol: method printf(java.lang.String,int)
| printf("Print number one - %d",1)
| ^----^
Run Code Online (Sandbox Code Playgroud)
我可以访问printf,只要我以常规方式指定它.
jshell> System.out.printf("Print number one - %d",1)
Print number one - 1$1 ==> java.io.PrintStream@1efbd816
Run Code Online (Sandbox Code Playgroud)
有什么指针吗?
在Java 9中,我们有方便工厂方法来创建和实例化不可变的List,Set和Map.
但是,目前还不清楚返回对象的具体类型.
例如:
List list = List.of("item1", "item2", "item3");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,实际返回了哪种类型的列表?它是ArrayList或LinkedList还是其他类型的List?
API文档刚提到这一行,没有明确提到它的LinkedList:
列表中元素的顺序与提供的参数的顺序或提供的数组中的元素的顺序相同.
Java 9中项目Jigsaw的主要目标之一是可靠的配置.也就是说,Java 9承诺解决类路径机制缺陷,它允许java启动程序运行程序,而不确保在运行时加载所有必需的类,这曾经导致java.lang.NoClassDefFoundErrors.
这是module-info.java通过在全新--module-path选项中声明模块依赖性来完成的.在启动Java应用程序之前分析模块图.
但是,我仍然可以做到以下几点.
com.spacey.explorer和com.spacey.rocket. com.spacey.explorer使用com.spacey.rocket.RocketZ由com.spacey.rocket模块定义和导出的类.编译和JARing两个模块后,一切正常运行.com.spacey.rocket.RocketZ从com.spacey.rocket模块中删除类型并重新编译并重新JAR只有这一个模块.com.spacey.explorer使用新编译的com.spacey.rocket模块运行以前编译的模块.java.lang.NoClassDefFoundError,这可能是在4小时的应用程序正常运行时间之后.有没有办法真正确保在运行Java应用程序时不仅验证了模块图(模块路径)的完整性,而且还完成了对实际类型可访问性的全面检查?
每隔一段时间,我都会通过某个查询来检索推文。这些推文必须传递给计算和操纵这些推文的服务。因此,这些服务已订阅我的发布者。因此Publisher.hasSubscribers()返回true。但是Submit或offer函数不会调用我的订阅者的onNext。因此,作为“修复”,我循环浏览订户并自己调用它。但是事实并非如此。
这是我的发布者的构造函数。
public TwitterStreamer(Executor executor, int maxBufferCapacity, long period, TimeUnit unit, String searchQuery){
super(executor, maxBufferCapacity);
this.searchQuery = searchQuery;
scheduler = new ScheduledThreadPoolExecutor(1);
this.tweetGetter = scheduler.scheduleAtFixedRate(
() -> {
List<String> tweets = getTweets(searchQuery);
/* this.lastCall = LocalDateTime.now();
for(Flow.Subscriber sub : this.getSubscribers()){
sub.onNext(tweets);
}*/
this.submit(tweets);
if(tweets.size() >= 20) this.close();
}, 0, period, unit);
}
Run Code Online (Sandbox Code Playgroud)
这是我的订户
package myFlowAPI;
import Interfaces.IProcess;
import Services.LogToFileService;
import java.util.List;
import java.util.concurrent.Flow;
import java.util.concurrent.atomic.AtomicInteger;
public class MySubscriber implements Flow.Subscriber<List<String>> {
private Flow.Subscription subscription;
private AtomicInteger count;
private IProcess processor; …Run Code Online (Sandbox Code Playgroud) 我在Java 8中启动了一个Maven项目,并希望将其迁移到Java 9.同时我也从Eclipse Neon EE转到Eclipse Oxygen EE.(重新安装JFX SDK).虽然Eclipse Workspace没有显示任何错误; 一旦我尝试编译并运行以前在Java 8中运行完全正常的完全相同的程序,我得到以下异常:
{...}
Caused by: java.lang.ClassNotFoundException: com.sun.javafx.css.converters.PaintConverter
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)
... 26 more
Run Code Online (Sandbox Code Playgroud)
运行应用程序应用程序的异常.主要
我现在已经多次重建了这个项目,无法让它工作......
使用jshell,有没有办法在解释器的范围内创建变量?我有类似的东西
Map<String,Object> vars = loadVarsFromSomething();
Run Code Online (Sandbox Code Playgroud)
我希望能够做类似的事情
for ( Map.Entry<String,Object> key : vars )
{
scope.put( key.getKey(), key.getValue() );
}
Run Code Online (Sandbox Code Playgroud)
那可能吗?
请注意,我所指的"范围" 是jshell解释器正在使用的Shell对象的实际范围.我需要获取对shell调用的shell的引用,以便我可以创建变量看起来好像是由用户/来电者分配的..
我需要重新编译java应用程序,在Java 8上编写.App使用com.sun.javafx.collections.ObservableListWrapper类,但在编译java 9时出现错误:
Error:(3, 22) java: package com.sun.javafx.collections is not visible
(package com.sun.javafx.collections is declared in module javafx.base, which does not export it to the unnamed module)
Run Code Online (Sandbox Code Playgroud)
我可以使用哪个班而不是ObservableListWrapper?或者如何绕过这个问题?
在我们的java语言中引入模块系统后,我无法理解.java9及以上版本是否仍然是平台独立的?我问这个问题,因为我已经读过,现在每个应用程序都会有自己的jre.那么,这个单一的jre将如何在所有操作系统上运行,如Windows,Linux或Mac OS.