You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在Java的UserInterface类中调用基于Lanterna库的Text类?

解决方案:在退出时触发Lanterna终端界面

嘿,我明白你的需求了——当用户输入"x"停止程序时,调用Lanterna的Text类显示感谢界面。现在你的Text类只有main方法,没法直接从UserInterface调用,咱们来一步步调整代码:

1. 重构Text类,封装显示逻辑

把Text里的终端界面逻辑提取成一个可调用的静态方法,这样其他类就能直接调用它了:

import com.googlecode.lanterna.terminal.*;
import com.googlecode.lanterna.terminal.ansi.*;
import java.io.IOException;

public class Text {
    // 把终端显示逻辑封装成静态方法,供外部调用
    public static void showExitScreen() throws IOException {
        Terminal terminal = new DefaultTerminalFactory().createTerminal();
        terminal.enterPrivateMode();
        terminal.newTextGraphics().putString(20, 9, "Thank you for using Quote Generator!");
        terminal.flush();
        terminal.readInput(); // 等待用户输入后退出界面
        terminal.exitPrivateMode();
    }

    // 保留main方法,方便单独测试这个终端界面
    public static void main (String[] args) throws IOException {
        showExitScreen();
    }
}

2. 在UserInterface中调用这个方法

command.equals("x")的分支里,直接调用刚才写的showExitScreen()方法就行。因为start方法已经声明了throws IOException,所以不用额外处理异常:

import java.util.Scanner;
import java.io.IOException;
public class UserInterface {
    private QuoteList ql;
    private Scanner scanner;
    public UserInterface(QuoteList ql, Scanner scanner) {
        this.ql = ql;
        this.scanner = scanner;
    }
    public void start() throws IOException {
        while (true) {
            System.out.print("Commands:\n" + "1 - import quotes\n" + "2 - add a quote\n" + "3 - share a quote\n" + "4 - tell all quotes\n" + "x - stop\n");
            String command = scanner.nextLine();
            if (command.equals("1")) {
                System.out.print("Enter file: ");
                String file = scanner.nextLine();
                this.ql.importFile(file);
            } else if (command.equals("2")) {
                System.out.print("Write your quote: ");
                String q = scanner.nextLine();
                this.ql.addQuote(q);
            } else if (command.equals("3")) {
                System.out.println(ql.shareQuote());
            } else if (command.equals("4")) {
                this.ql.printQuotes();
            } else if (command.equals("x")) {
                // 调用Text类的退出感谢界面
                Text.showExitScreen();
                break;
            }
        }
    }
}

3. 编译和运行的正确姿势

因为用到了Lanterna的jar包,编译时要确保类路径包含它:

  • 编译Text.java:javac -cp lanterna.jar Text.java
  • 编译UserInterface.java(假设QuoteList已经编译完成):
    • Linux/macOS:javac -cp .:lanterna.jar UserInterface.java
    • Windows:javac -cp .;lanterna.jar UserInterface.java
  • 运行主程序(假设你的入口类是包含main方法的启动类):
    • Linux/macOS:java -cp .:lanterna.jar YourMainEntryClass
    • Windows:java -cp .;lanterna.jar YourMainEntryClass

这样当用户输入"x"时,程序会先弹出Lanterna的终端界面显示感谢信息,等用户按下任意键后退出这个界面,然后结束主循环,程序正常退出。

内容的提问来源于stack exchange,提问作者sqpl13

火山引擎 最新活动