目录

2023

DOS(磁盘操作系统)

1. 文件夹操作
  • lists 当前目录下的所有文件
1
$ ls
  • change directory 进入指定目录
1
2
3
4
5
cd <path to directory>
/* 切换到主目录 */
cd ~ 
/* 切换到父目录 */
cd ..

-make a new directory 用给定的名称创建一个新目录

1
mkdir <directory name>
  • move the file 将给定源的文件移动到给定的目标
1
mv <source path> <destination path>

Windows PowerShell

命令摘要

1. 文件夹操作
  • 解压指定目录下的文件
1
Expand-Archive -<DestinationPath> . -Force <zipFile>

常用操作

  • 在任意文件目录下:shift + 右键单击“在此处打开PowerShell窗口”将会自动切换到该文件目录

Git Bash

命令摘要

1. 文件夹操作
  • 解压指定目录下的文件
1
unzip <zipFile>

常用操作

  • ctrl + c 退出命令行模式

IDEA相关

1. 创建Javafx-Maven项目

step1- 创建Javfx项目 File-New-Project-Java FX-Next-Finish

step2- 添加Maven框架 右键点击项目-Add Framework Support-Maven-Ok

step3-Project Structrue-Modules-Sources 按下图设置项目文件目录 /images/java/2023/maven.png

step4- 将自动生成的fxml文件移动到resources/fxml/下,注意导入Maven以后必须用一个前导斜杠调用它,比如: FXMLLoader.load(getClass().getResource("/fxml/sample.fxml"))

2. 显示version control

点击VCS-Browse VCS Respository-Show Git Respository Log || 取消勾选File-Settings-Version Control-Commit-[Use non-modal commit interface]

Maven

插件
1
2
3
4
5
6
7
 <build>
        <plugins>
            <plugin>
             ...
            </plugin>
        </plugins>
    </build>

引入dependency的插件管理

1
2
3
4
 <plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.2</version>
 </plugin>

——>
/images/EFL/2023/depend.png

JAVA

经验总结
总结

1.程序异常时——>检查程序本身逻辑

——»是否由未被捕获的异常(比如空指针)导致——»>在可能出现异常的地方用try-catch包出再调试

——»是否由未被识别的命名冲突导致

Runtime类 —— 程序调用外部exe
摘要
Java 中,Runtime 类用于与每个 Java 应用程序交互,每个 Java 应用程序都有一个 Runtime 类的单个实例,允许应用程序与应用程序运行的环境进行交互
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/**
 * 调用外部exe程序并通过process.getInputStream()捕获外部程序的输出流,然后System.out
 * to learn: 对于应用程序来说,其输出流有两种:
                    标准输出流
                        标准错误流
             因此,一个健壮的代码应同时对这两种输出流进行处理
*/
class RuntimeTest{
    public static void main(String[] args) throws IOException {
        final Process process = Runtime.getRuntime().exec("E:\\xx\\xx.exe");
        //get input stream
        handleProcessStreamByLine(process.getInputStream());
        handleProcessStreamByBytes(process, process.getInputStream());
        //get error stream
        handleProcessStreamByLine(process.getErrorStream());
        handleProcessStreamByBytes(process, process.getErrorStream());
        //to learn: 验证外部程序是否执行成功
        // Process.exitValue()/Process.waitFor() 获取外部程序的返回值为 0 表示执行成功,其余值表示外部程序执行出错
        try {
            int exitValue = process.waitFor();
            System.out.println("process exitValue:" + exitValue);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private void handleProcessStreamByLine(InputStream streamToHandle) {
        new Thread(() -> {
            BufferedReader br = new BufferedReader(new InputStreamReader(streamToHandle));
            String line;
            try {
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }

    private void handleProcessStreamByBytes(Process process, InputStream streamToHandle){
        new Thread(() -> {
            try {
                while (process.isAlive()) {
                    int length = streamToHandle.available();
                    if (length > 0) {
                        byte[] bytes = new byte[streamToHandle.available()];
                        streamToHandle.read(bytes);
                        System.out.println(new String(bytes));
                    }
                }
                streamToHandle.close();
            } catch (IOException e) {
                 e.printStackTrace();
            }
        }).start();
    }
}

JAVAFX

ComboBox

combobox.getEditor().getText()
获取组合框的文本值

TabPane
1
2
3
4
5
6
7
8
<TabPane prefHeight="100.0" prefWidth="200.0">
    <Tab fx:id="tab1" closable="false" text="tab1">
        <fx:include source="options/tab1.fxml"/>
    </Tab>
    <Tab fx:id="tab2" onClosed="#closeTabEvent" text="tab2">
        <fx:include source="options/tab2.fxml"/>
    </Tab>
</TabPane>
细节注意

1.closable=false表示此tab不可以关闭

2.onClosed事件在关闭tab后触发

3.source的路径的根目录是fxml。比如resources/fxml/options/..

###树莓派 在Raspberry Pi上打开一个终端窗口,可以通过单击桌面上的“终端”图标或Ctrl+Alt+T

###Linux命令

1
2
3
4
#浏览已安装的程序
dpkg --list
#查看文件权限和所有者等详细信息
ls -l filename

其它

检索小技巧

搜索任意API文档 包名关键字+Java doc

1.下载任意网页的图标(favicon)

地址搜索栏:域名/favicon.ico

2.项目启动端口被占用的解决办法

1.查看被占用的端口进程:15490是被占用的端口号

1
2
netstat -aon|findtr 15490
-> TCP    127.0.0.1:15490        0.0.0.0:0 

2.根据PID找到被占用端口的进程:15248是PID

1
2
tasklist|findstr 15248
-> v2ray.exe                    15248 Console                    4     26,032 K

3.通过进程名称终止进程

1
2
taskkill /f /t /im v2ray.exe
-> 成功: 已终止 PID 15248 (属于 PID 15156 子进程)的进程