微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vscode coderunner 执行java代码有问题

如何解决vscode coderunner 执行java代码有问题

我有以下结构:

java_projects > chapter9

通常我 cd 到一个高于 java_projects 的目录,然后编写 java_projects 以从该位置创建一个工作区目录。现在,在第 9 章中,我有以下文件

Tv.java,TestTv.java

在 TestTv.java 中,我有以下代码

package chapter9;

public class TestTv {
    public static void main(String[] args){
    Tv tv = new Tv();
    tv.turnOn();
    tv.setChannel(30);
    tv.setVolume(3);

    System.out.println("Tv channel is: " + tv.channel);
    // testing java date class

    java.util.Date date = new java.util.Date();
    System.out.println("time elapsed since jan 1,1970 is: " + date.getTime() + "milliseconds");
    System.out.println(date.toString());
}
}

当我通过代码运行器运行它时,出现以下错误

    TestTv.java:5: error: cannot find symbol
    Tv tv = new Tv();
    ^
  symbol:   class Tv
  location: class TestTv
TestTv.java:5: error: cannot find symbol
    Tv tv = new Tv();
                ^
  symbol:   class Tv
  location: class TestTv

我不太确定为什么会发生这种情况。经过进一步调查,我了解到这与在 Java 程序中使用之前首先编译 Tv 类有关。好的,所以我查看了 vscode 中的 settings.json 并将其更改为:

"java": cd $dir && javac *.java && java $fileName" 

这仍然给我同样的错误

所以我退出了chapter9 目录并尝试了javachapter9/TestTv.java 并且成功了!!

如何告诉 vscode 的执行器映射返回上一级并执行它?

谢谢

{
"code-runner.clearPrevIoUsOutput": true,"code-runner.ignoreSelection": true,"code-runner.saveAllFilesBeforeRun": true,"java.autobuild.enabled": true,"code-runner.fileDirectoryAsCwd": false,"java.configuration.updateBuildConfiguration": "automatic","code-runner.executorMap": {
    "java": "cd $dir && javac *.java && java $fileName"
},"code-runner.runInTerminal": true,

}

附上我的电视课

public class Tv {
// instance variables
int channel = 1; // default channel is 1
int volumeLevel = 1;
boolean on = false;  // Tv is off

public Tv(){};

public void turnOn(){
    on = true;
}

public void turnOff(){
    on = false;
}

public void setChannel(int newChannel){
    if (on && newChannel >= 1 && newChannel <= 120)
        channel = newChannel;
}

public void setVolume(int newVolumeLevel){
    if (on && newVolumeLevel >= 1 && newVolumeLevel <= 7){
        volumeLevel = newVolumeLevel;
    }
}

public void channelUp(){
    if (on && channel < 120)
        channeL++;
}

public void channelDown(){
    if (on && channel > 1)
        channel--;
}

public void volumeUp(){
    if (on && volumeLevel < 7)
        volumeLeveL++;
}

public void volumeDown(){
    if (on && volumeLevel > 1)
        volumeLevel--;
}

我正在寻找这样的东西?

"java": cd $dir && javac *.java && java (go back one directory up) $dir[my_folder_name]fileName" 

这样的事情...

"java": cd $dir && javac *.java && cd .. java  chapter9/TestTv.java"

我不知道我不能说得更清楚了。我有一个 mac OSX、sierra、javaSE11。我认为这与操作系统无关。它更多的是一个编译问题。去 vscode 的 github 没有帮助,因为他们不回复任何东西。

解决方法

我对这个主题不太熟悉,但是基于在您的问题/答案中查看此语法并将“&&”语法视为一系列脚本,您似乎还需要一个“&&”组合,因此在调用 java-interpreter 作为最后一件事之前,“cd ..”向上移动到父目录。

所以: "java": cd $dir && javac *.java && cd .. && java Chapter9.TestTv"

另外,我对 mac 要求不太熟悉,但我知道有些系统不介意“cd ..”,而有些系统只在空格中加上“cd ..”,所以在输入时要小心..

,

我对这个话题也不是很熟悉。我进行了一些试验和错误,并设法使其与以下内容一起使用:

"code-runner.executorMap": {
    "java": "cd $dir && javac *.java && cd .. && java \"$(basename $dir)/$fileNameWithoutExt\""
}

值得注意的部分/变化:

  • && cd .. 向上移动一个目录。
  • $(basename $dir) 返回最内部的目录。 chapter9 在您的示例中,但如果您更改到另一个目录,则不必更改它。
  • $fileNameWithoutExt:运行时不带扩展名的代码文件的基本名称,如配置下的 here 所述。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。