我已经在IntelliJ IDEA的一个项目上工作了大约两个月了.今天,当我启动IDE(通常会直接打开项目)时,IntelliJ需要花费非常长的时间来加载,当它打开项目时,主.java文件显示了很长的空格而没有别的,而不是以前的代码..iml文件是项目中唯一的另一件事,很好.顶部有错误消息:
"这个文档包含很长的行.强制启用软包装以提高编辑器性能."
尝试编辑文档会导致整个程序冻结并变得无法响应.到底发生了什么?有一天它很好,然后就这样做了,我如何让我的项目恢复,我该如何防止这种情况?
我正在转换一个纯JavaFx应用程序,其中下面的代码在将所有内容放在一个类中时工作正常,到FXML,其中Stage声明和按钮处理程序在不同的类中.在一个Controller中,我试图实现一个方法,允许用户选择一个目录并将其存储在一个变量中供以后使用:
private File sourceFile;
DirectoryChooser sourceDirectoryChooser;
@FXML
private void handleSourceBrowse() {
sourceDirectoryChooser.setTitle("Choose the source folder");
sourceFile = sourceDirectoryChooser.showDialog(theStage);
}
Run Code Online (Sandbox Code Playgroud)
但是,"theStage"是该方法所需的阶段,只在FolderSyncer4.java中存在(如果这是正确的术语):
public class FolderSyncer4 extends Application {
final String FOLDER_SYNCER = "FolderSyncer";
Stage theStage;
@Override
public void start(Stage primaryStage) throws Exception {
theStage = primaryStage;
//TODO do the FXML stuff, hope this works
Parent root = FXMLLoader.load(getClass().getResource("FolderSyncerMainWindow.fxml"));
theStage.setScene(new Scene(root, 685, 550));
theStage.setTitle(FOLDER_SYNCER);
theStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
我怎么绕过这个?我需要以某种方式再次实现该方法,但突然间我不能将该阶段作为参数传递.
JavaFx/FXML上下文中的"Node"一词是什么意思?如果我搜索这个问题,我发现所有人都在使用"讨论别的东西"一词,但没有解释.例如,这个问题的答案: 如何从控制器类打开JavaFX FileChooser?:
对于场景中的任何节点(例如,根节点;但是使用@FXML注入的任何节点都可以),
chooser.showOpenDialog(node.getScene().getWindow());
节点会是什么,以及如何"注入@FXML"?
你如何获得路径的长度?我在这里错过了什么吗?奇怪的是,int类()也没有任何类似的方法在Path类中实现.示例:用于路径
C:\foo\bar\anotherfolder\subfolder
Run Code Online (Sandbox Code Playgroud)
该方法将返回4.
当我的笔记本电脑突然完全关闭时,我正在 Intellij 中进行一个项目(我拔掉了充电器,如果您移动计算机,显然电池会失去联系)。我确定我在拔掉插头之前保存了。现在我启动了 Intellij,我注意到了几个令人不快的变化:
IDE 不记得最近的项目;在我启动它后,它并没有像以前那样直接打开我的项目。
项目文件都没有了,剩下的就是一个 .iml 文件。
颜色主题变回白色,即使我将其切换为黑色。
最令人不安的是,本地历史记录似乎被抹去了,除了 .iml 文件之外什么都没有。
鉴于这些情况,我有以下问题:
到底发生了什么?为什么我的所有文件都消失了?他们都得救了,怎么可能就这么消失了?
有没有办法恢复它们,或者 Intellij 是否彻底废弃了它们,它们已经消失了?
在我的JavaFX FXML应用程序中,我希望用户单击主窗口中某个地方的菜单项时弹出一个辅助窗口,以便用户可以在其中输入一些输入,然后在单击按钮时将其输入到应用程序中,辅助窗口将关闭。
那里的所有教程都略有偏离。他们描述了如何在纯JavaFX中执行此操作,这显然与您在FXML中使用的方式不同,或者他们解释了如何切换场景,从而关闭了旧的场景。我想这很简单,按照定义FXML布局及其Controller,用它们创建一个新的Scene,然后调用类似
theStage.showScene(userInputWindow);
Run Code Online (Sandbox Code Playgroud)
但是有效的解决方案似乎要复杂得多,其背后的原因也与我的假设不同。例如,在本教程中,我并不真正理解他们为什么将这些转换放在那里,FXMLLoader()的实际作用,或者实际上我将如何适应当前的任务。此外,资源指出“舞台一次只能显示1个场景”。在我看来,JavaFX应用程序似乎缺乏像显示新窗口而不关闭旧窗口这样琐碎的功能。也许我误解了舞台和场景是什么以及它们可以做什么。所以我需要知道:
如何在代码中达到上述效果?
解决方案背后的原因是什么?那里涉及的所有事情是什么?
在控制器(或者可能是主文件或其他文件,我不确定这一切是如何工作的)中,我们有以下内容:
String foo = "Foo.";
Run Code Online (Sandbox Code Playgroud)
在 Scene Bilder 生成的 FXML 中,是这样的:
<Button mnemonicParsing="false" prefHeight="25.0" prefWidth="61.0" text="Browse" />
Run Code Online (Sandbox Code Playgroud)
如何使 foo 的值显示为按钮上的文本?我应该在哪里存储它,控制器还是其他地方?我仍然对 Main 文件、控制器和 FXML 文件如何准确组合在一起感到困惑。
我在处理我的一个小项目时发现了一些奇怪的事情:我用一些代码来编写代码System.out.println();来追踪一个bug.奇怪的是,当我从IDE运行错误程序时,Exception堆栈跟踪的行和一些打印语句的打印输出在每次运行程序时以不同的顺序出现.常识将规定同一程序每次都以相同的方式运行,包括例外,因此所有执行的输出也必须相同.然而,这种情况并非如此.线条的内容保持不变,并且堆栈跟踪线和打印输出线的顺序保持一致,但每次都会混合不同.所以在一次运行中,控制台输出是
populatePinArrays: An input pin added to gate!
populatePinArrays: An input pin added to gate!
populatePinArrays: An output pin added to gate!
Exception in thread "main" java.lang.NullPointerException
at Gates.Pin.isReadyToEvaluate(Pin.java:28)
at Gates.Pin.evaluate(Pin.java:19)
at Gates.TheCircuit.evaluateTheCircuit(TheCircuit.java:42)
at main.Main.main(Main.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
CircEval: all set to dirty
CircEval: all input pins set to clean
Run Code Online (Sandbox Code Playgroud)
而下一次它可以
Exception in thread "main" populatePinArrays: An input pin added to gate!
populatePinArrays: An input pin added to gate!
java.lang.NullPointerException …Run Code Online (Sandbox Code Playgroud)