这是Duke.java文件:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Region;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import static java.lang.Integer.parseInt;
public class Duke extends Application {
private Storage storage;
private TaskList tasks;
private Ui ui;
private ScrollPane scrollPane;
private VBox dialogContainer;
private TextField userInput;
private Button sendButton;
private Scene scene;
private Image user = new Image(this.getClass().getResourceAsStream("images/DaUser.png"));
private Image duke = new Image(this.getClass().getResourceAsStream("images/DaDuke.png"));
@Override
public void start(Stage stage) {
//Step 1. Setting up required components
//The container for the content of the chat to scroll.
scrollPane = new ScrollPane();
dialogContainer = new VBox();
scrollPane.setContent(dialogContainer);
userInput = new TextField();
sendButton = new Button("Send");
AnchorPane mainLayout = new AnchorPane();
mainLayout.getChildren().addAll(scrollPane, userInput, sendButton);
scene = new Scene(mainLayout);
stage.setScene(scene);
stage.show();
stage.setTitle("Duke");
stage.setResizable(false);
stage.setMinHeight(600.0);
stage.setMinWidth(400.0);
mainLayout.setPrefSize(400.0, 600.0);
scrollPane.setPrefSize(385, 535);
scrollPane.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER);
scrollPane.setVbarPolicy(ScrollPane.ScrollBarPolicy.ALWAYS);
scrollPane.setVvalue(1.0);
scrollPane.setFitToWidth(true);
// You will need to import `javafx.scene.layout.Region` for this.
dialogContainer.setPrefHeight(Region.USE_COMPUTED_SIZE);
userInput.setPrefWidth(325.0);
sendButton.setPrefWidth(55.0);
AnchorPane.setTopAnchor(scrollPane, 1.0);
AnchorPane.setBottomAnchor(sendButton, 1.0);
AnchorPane.setRightAnchor(sendButton, 1.0);
AnchorPane.setLeftAnchor(userInput, 1.0);
AnchorPane.setBottomAnchor(userInput, 1.0);
sendButton.setOnMouseClicked((event) -> {
handleUserInput();
});
userInput.setOnAction((event) -> {
handleUserInput();
});
dialogContainer.heightProperty().addListener((observable) -> scrollPane.setVvalue(1.0));
}
private void handleUserInput() {
Label userText = new Label(userInput.getText());
Label dukeText = new Label(getResponse(userInput.getText()));
dialogContainer.getChildren().addAll(
DialogBox.getUserDialog(userText.getText(), user),
DialogBox.getDukeDialog(dukeText.getText(), duke)
);
userInput.clear();
}
public String getResponse(String input) {
return "Duke heard: " + input;
}
public Duke(String filePath) {
ui = new Ui();
storage = new Storage(filePath);
try {
tasks = new TaskList(storage.load());
} catch (DukeException e) {
ui.showLoadingError();
tasks = new TaskList();
}
}
public Duke() {
this("data/duke.txt");
}
public static void main(String[] args) {
new Duke("data/duke.txt").run();
}
public void run() {
ui.showWelcome();
boolean isExit = false;
while (!isExit) {
try {
String fullCommand = ui.readCommand();
ui.showLine();
Command c = Parser.parse(fullCommand);
c.execute(tasks, ui, storage);
isExit = c.isExit();
} catch (DukeException e) {
ui.showError(e.getMessage());
} finally {
ui.showLine();
}
}
}
}
更新:我将lib文件夹导入到我的项目中,现在错误消失了。但是在我运行项目时发生了另一个错误,这是“由以下原因引起的:java.lang.NullPointerException:输入流不能为null”
根据您的评论,您使用的是Java13,而不是Java11。
JavaFX不是Java13和Java11中JDK的一部分。您可以从openjfx.io获取JavaFX。然后需要将javafxjar文件添加到模块路径中,因为由于jdk9,java使用模块。
与您的问题无关,但“系统”属性包含有关java版本的详细信息,例如。。。
System.getProperty("java.runtime.version");
我得到以下错误: 我试着重新安装,但没有任何运气。我还尝试将更改为或类似于,但仍然不起作用。
使用“mvn包”创建jar后,我使用以下命令从jar创建安装程序: 当尝试双击项目可执行文件(.exe由jpackage创建)时,它不会打开。从cmd运行时,我收到以下错误消息: C: \程序文件\项目\u可执行文件\u名称 奇怪的是,如果我双击jar(jpack用来创建程序映像的那个),它会启动我的应用程序。java-jar也是如此。当使用intellij和mvn javafx的“运行”按钮时,
我的应用程序从源代码处运行得非常好,但是当我编译到单个jar文件时,我得到了错误: 错误:缺少JavaFX运行时组件,而这些组件是运行此应用程序所必需的。 我使用作为我的存储库管理器,并且我的Maven安装是成功的。 注意:在我的构建工件中,我可以看到包含及其所有库
我正在和几个朋友一起做一个项目,我们正在使用vscode,这样我们就可以有效地使用git(这是一个学校项目,所以IDE是不可协商的,不要告诉我使用不同的),我们遇到了一个问题,他们都不能运行这个javafx应用程序,我已经在那里测试了。一开始我在运行它时遇到了麻烦,并且得到了同样的错误,但是我今天早上修复了它,现在我放在那里的任何javafx文件都可以为我运行,只要我在json中有正确的vmarg
所以我对javafx还很陌生,我正在为一些软件包而挣扎(我想) 这是我创建条形图的示例代码,我收到了错误"JavaFX运行时组件丢失,并且需要运行此应用程序"。然后我添加了一个vmargument到我的配置。由于我使用vscode我输入 “vmArgs”:”--模块路径/C:/Documents/javafx-sdk-11.0.2/lib--添加模块javafx.controls、javafx.f
我想从我的javaFX项目创建exe文件。我已经将我的项目导出到可运行的jar文件中,用launch4j将其更改为exe,但当我用命令promp运行jar文件时,它显示“错误:缺少JavaFX运行时组件,运行此应用程序需要这些组件” 当我导出到时。jar最后警告了多行的“重复条目:module info.class”。这是原因吗?