我有以下结构:
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"
这仍然给了我同样的错误。
所以我从第9章目录中删除并尝试了java第9章/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 并没有帮助,因为他们不回复任何事情。