标签: jshell

在jshell中查看类路径

JShell是Java的REPL.要在默认JRE之外使用其他类,它包含一个/classpath命令,用于添加当前类路径的路径.

有没有办法在JShell环境中查看当前的类路径?


请注意,我正在使用以下早期版本:

java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+111)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+111, mixed mode)
Run Code Online (Sandbox Code Playgroud)

java classpath read-eval-print-loop java-9 jshell

5
推荐指数
1
解决办法
716
查看次数

无法从 Mac 终端执行 jshell

我目前在我的 Mac Sierra 上使用 java 1.8。

java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)

现在我想运行“jshell”来直接从终端执行简单的java命令。但我最终得到了以下错误消息 -

Unable to locate an executable at "/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/jshell" (-1)
Run Code Online (Sandbox Code Playgroud)

我需要采取什么解决方法来避免出现此错误消息?

java macos terminal java-9 jshell

5
推荐指数
1
解决办法
1688
查看次数

在Java 9上,为什么System.getenv()的输出在jshell中不完整?

我正在使用Windows 10并运行Oracle昨天发布的Java 9版本.

如果我打开一个jshell并输入System.out.println(System.getenv()),输出就像预期的那样,如下面屏幕截图的下半部分所示.

但是,如果我只是输入System.getenv(),则输出中间会丢失大量数据.请参阅下面屏幕截图的初始部分.这似乎是jshell的一个特性,因为在System.getenv()输出中的省略号(" ... ")下面的屏幕截图中(在第二个框中用手绘黄色边缘)完全对应于缺失的数据.

缺少环境变量CommonProgramFiles的结束部分,环境变量SPRING_HOME的开头也是如此,并且还有其他几个环境变量,例如Path,根本没有显示.

在此输入图像描述

(屏幕截图中的某些信息因隐私而模糊不清.)

有没有其他人看到同样的事情(或没有),有没有人有关于为什么jshell这样做的建议?

read-eval-print-loop java-9 jshell

5
推荐指数
1
解决办法
249
查看次数

将包私有类导入 JShell

在 Java 9 发布后,我在玩 JShell,并尝试导入我制作的包。由于我为其编码的整个应用程序将包含在该包中,因此除了一个类(我尚未编码)之外的每个类都是包私有的。我的类路径是正确的,但我仍然无法使用 JShell 中包中声明的任何类型(它会引发“找不到符号”错误)。我是否需要将它们公开以供访问,或者有什么方法可以测试包私有类?这是我试过的确切代码。

我当前的目录是

C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src
Run Code Online (Sandbox Code Playgroud)

我的课程路径是

C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\cls
Run Code Online (Sandbox Code Playgroud)

包目录(用于字节码)是

C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\cls\collatz
Run Code Online (Sandbox Code Playgroud)

CollatzSequence是包含在collatz.

PS C:\Users\Sylvaenn> cd OneDrive\Documents\Programs\Java\src
PS C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src> jshell
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

jshell> import collatz.*;

jshell> CollatzSequence seq = new CollatzSequence(BigInteger.ONE);
|  Error:
|  cannot find symbol
|    symbol:   class CollatzSequence
|  CollatzSequence seq = new CollatzSequence(BigInteger.ONE);
|  ^-------------^
|  Error:
|  cannot find symbol
|    symbol:   class CollatzSequence
|  CollatzSequence seq …
Run Code Online (Sandbox Code Playgroud)

java packages private java-9 jshell

5
推荐指数
1
解决办法
1200
查看次数

有没有办法修改模块路径并添加程序化JShell实例的模块?

我试图通过我使用JShell API创建的JShell实例在运行时运行一些Java代码.为了演示我的问题,我将分享我的简单代码.

在我目前的设置中,我有一个名为lib的目录,它有MySQL Java驱动程序:mysql-connector-java-5.1.35.jar.

通过命令工具启动JShell并添加所需的模块:

jshell --module-path lib --add-modules mysql.connector.java
Run Code Online (Sandbox Code Playgroud)

然后加载mysql驱动程序适合我:

jshell> Class.forName("com.mysql.jdbc.Driver").newInstance();
$1 ==> com.mysql.jdbc.Driver@42f93a98
Run Code Online (Sandbox Code Playgroud)

我用module-info.javaas 创建了一个类似的Java 9模块:

module example.loadmysql {
    requires java.sql;
    requires mysql.connector.java;
    requires jdk.jshell;
}
Run Code Online (Sandbox Code Playgroud)

src/example/loadmysql/Runner.java:

package example.loadmysql;

import jdk.jshell.*;
import java.sql.*;

public class Runner {
    public static void main(String[] args) throws Exception {
        // this works because this module requires mysql.connector.java
        System.out.println(Class.forName("com.mysql.jdbc.Driver").newInstance());

        JShell js = JShell.create();
        String code = ""
            + "try {"
            + "    Class.forName(\"com.mysql.jdbc.Driver\").newInstance();" …
Run Code Online (Sandbox Code Playgroud)

java java-9 jshell module-path

5
推荐指数
1
解决办法
824
查看次数

如何在 JShell 中提供 javadoc 文档?

我正在使用 JShell 来测试一个库,我通过类路径为其提供了类、源和 javadoc,如下所示:

jshell --class-path library-javadoc.jar:library-sources.jar:library-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)

尽管如此,当我收到记录的 Java 标识符之后的双选项卡时:

<no documentation found>
Run Code Online (Sandbox Code Playgroud)

JShell 对文档有何期待?

java java-9 jshell

5
推荐指数
1
解决办法
634
查看次数

如何在jshell脚本中获取用户输入?

问题:

如何在jshell 脚本中获取用户输入?或者我做错了什么?

注意:不是在寻找如何将参数传递给 jshell script

例子:

例如脚本hello.java

Scanner in = new Scanner(System.in);

System.out.print("Enter number n1: ");
int n1 = in.nextInt();
System.out.print("Enter number n2: ");
int n2 = in.nextInt();

System.out.println("n1 + n2 = "+ (n1 +n2));

/exit
Run Code Online (Sandbox Code Playgroud)

如果我在 jshell 中逐行输入它可以工作,但然后我运行jshell hello.java它就不行了。投掷java.util.NoSuchElementException

我得到的输出:

@myMint ~/Java $ jshell hello.java 
Enter number n1: |  java.util.NoSuchElementException thrown: 
|        at Scanner.throwFor (Scanner.java:858)
|        at Scanner.next (Scanner.java:1497)
|        at Scanner.nextInt (Scanner.java:2161)
|        at …
Run Code Online (Sandbox Code Playgroud)

java-9 jshell

5
推荐指数
1
解决办法
2103
查看次数

JShell如何查找变量或结果的类型

如何在JShell中查找变量或表达式结果的类型.

正在用Java试验Bitwise Operators

jshell> byte b=5<<-1;
|  Error:
|  incompatible types: possible lossy conversion from int to byte
|  byte b=5<<-1;
|         ^---^

jshell> 5<<-1
$2 ==> -2147483648

jshell>
Run Code Online (Sandbox Code Playgroud)

是否有类似Python类型(5 << - 1)的替代方法在Jshell中查找表达式或变量的结果类型.

java jshell

5
推荐指数
1
解决办法
638
查看次数

如何在启动时将JVM选项传递给jshell

我想做以下事情:

jshell -v -Duser.country=FR -Duser.language=fr

以便获得例如个性化的Locale.getDefault().

java jvm-arguments java-9 jshell

5
推荐指数
1
解决办法
139
查看次数

JShell 历史记录存储在哪里?

有谁知道 JShell 历史记录存储在哪里(Windows-10 上的 Java-11/Open JDK,但任何配置都可能有用)?我一直在$HOME( $USERPROFILE, $APPDATA, ...) 四处寻找。它是基于文件的吗?

JShell 是基于 JLine 的,对吧?我确实发现了$JAVA_HOME\legal\jdk.internal.le\jline.md

java jshell

5
推荐指数
1
解决办法
834
查看次数