我无法弄清楚如何在JavaFX中创建模态窗口.基本上我有文件选择器,我想在用户选择文件时询问用户.我需要这些信息才能解析文件,因此执行需要等待答案.
我已经看到了这个问题但是我无法找到如何实现这个行为.
我有一个JavaFX应用程序,当按下X按钮时,该应用程序最小化到托盘.我一直在通过VisualVM监视应用程序的内存趋势.
奇怪的是,当应用程序打开或最小化到任务栏时,内存总是被GC返回到使用的初始内存.然而,当它被最小化到托盘(stage.hide(),systemTray.show())时,内存得到GCed,但是呈上升趋势(泄漏).
在VisualVM中,Old Gen空间不断上升,一旦它在一段时间后达到最大值,应用程序将无法响应,并且CPU峰值达到80%.
我注意到如果我stage.show()通过双击托盘图标等在应用程序上,GC将清除所有内容恢复正常.但是,如果长时间离开,它将无法使GC成为老一代.
堆转储显示javafx.scene.Scene#7并javafx.scene.Node[]#2具有最多保留空间.如果未隐藏舞台,则两者都不会出现.在参考文献中,它显示
this[] -> dirtyNodes().
this - value: javafx.scene.Node[] #2
<- dirtyNodes - class: javafx.scene.Scene, value: javafx.scene.Node[] #2
<- value - class: javafx.scene.Node$ReadOnlyObjectWrapperManualFire, value:
javafx.scene.Scene #7
Run Code Online (Sandbox Code Playgroud)
造成这种情况的原因是什么?如何解决这个问题?
我正在使用Java FX场景构建器构建UI,我希望工具栏中的按钮向工具栏的右侧浮动.我已经尝试更改父(工具栏)和按钮的节点方向,但似乎都被忽略.
我想在javafx中创建自定义列表视图.在这里,我需要在列表单元格中绑定多个组件,如下所示,例如一个标签,一个文本字段,一个HBox下的一个按钮和两个按钮,一个超链接,另一个HBox中的一个标签,这些HBox属于一个VBox,这个VBox属于单个列表单元格,它将重复并生成一个列表视图.
代码是
<ListView fx:id="ListView" layoutX="0" layoutY="30" prefWidth="600" prefHeight="300">
<HBox fx:id="listBox" alignment="CENTER_LEFT">
<padding><Insets top="5" bottom="5" left="5"></Insets> </padding>
<HBox alignment="CENTER_LEFT" prefWidth="170" minWidth="88">
<Label fx:id="surveyName" text="Field A" styleClass="Name"></Label>
</HBox>
<VBox styleClass="Description" prefWidth="155" minWidth="86">
<HBox>
<HBox styleClass="surveyDesIcon" prefWidth="20" prefHeight="16"></HBox>
<Label fx:id="surveyCode" text="PRW3456HJ"></Label>
</HBox>
<HBox>
<HBox styleClass="DateIcon" prefWidth="20" prefHeight="16"></HBox>
<Label fx:id="Date" text="PRW3456HJ"></Label>
</HBox>
</VBox>
<HBox fx:id="Status" prefWidth="160" minWidth="80">
<Label fx:id="StatusLabel" text="Checking Files.."/>
</HBox>
<HBox fx:id="StatusIcon1" prefWidth="50" prefHeight="50" alignment="CENTER">
<Label styleClass="StatusIcon1" prefWidth="24" prefHeight="24" alignment="CENTER"/>
</HBox>
<HBox fx:id="StatusIcon2" prefWidth="50" prefHeight="50" styleClass="StatusIconBox" alignment="CENTER">
<Hyperlink styleClass="StatusIcon2" prefWidth="24" maxHeight="24" alignment="CENTER"/> …Run Code Online (Sandbox Code Playgroud) 当我通过JavaFX应用程序从JavaFX 2升级到JavaFX 8时,我注意到ScrollPanes总是显示为灰色矩形,即使背景颜色设置或背景设置为透明.
我有一个HTML5用户界面和一个Java后端,并希望避免在普通的java中重建HTML ui,所以我的想法是运行本地网络服务器并使用webview在"本机"窗口中呈现它.解决方案似乎是使用可以嵌入摇摆的JavaFX WebView.在纸上听起来很棒(特别是因为他们声称使用的是WebKit,它在Chrome/Safari中的UI性能明显更好).
它有效,但是:性能难以置信.在Chrome,Safari(甚至是速度较慢的Firefox)中,数量级比同样的速度慢.它几乎无法使用(我的UI大量使用JQuery/JS).顺便说一句,我正在使用这篇文章中的代码.
问题是:
任何人都可以介绍我的经验吗?我只是做错了什么或者这是由JavaFX引起的,因此"正常"?
更好的想法如何实现这一目标?我目前只是简单地启动系统浏览器,但它不是很好(看起来不像集成).
下面的代码片段给我错误Not on FX application thread; currentThread= JavaFX Application Thread.这个应用程序在java 1.7中工作得很好但是当我把它移动到fx8时它现在给出了错误.当我在第一次尝试时启动应用程序时它正在按预期工作.但是在关闭舞台并再次打开它之后它无法正常工作.
错误也是模棱两可的.Not On fx application thread and current thread- javafx application thread如果当前线程是fx应用程序线程,那么它不是在fx应用程序线程上意味着什么.
progressDialog = createProgressDialog(service);
progressDialog.show();
progressDialog.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
// if (service.isRunning()) {
// service.cancel();
progressDialog.close();
// }
}
});
}
@SuppressWarnings("unchecked")
private Stage createProgressDialog(final Service<IStatus> service) {
stage = new Stage();
URL url = FileLocator.find(Activator.getDefault().getBundle(),
new Path("icons/xxx_16x16.png"), null); //$NON-NLS-1$
stage.getIcons().add(new Image(url.getFile()));
stage.setTitle("Downloading ..."); //$NON-NLS-1$
// Creating StackPane
stage.initModality(Modality.WINDOW_MODAL);
}
Run Code Online (Sandbox Code Playgroud) 我需要在JavaFX中将图像调整为特定尺寸,例如100 x 100像素.
我怎样才能做到这一点?Image或ImageView类可以用于此目的吗?
我的项目有不同的模块.
当我尝试使用父模块的pom.xml打包时,它显示错误 - "打包jar无效聚合器项目需要pom作为打包".
如何从maven制作应用程序的可执行jar?
我一直试图让Maven与JavaFX建立起来.尽管我对Maven和JavaFX缺乏经验,但我并不认为这是一个很大的挑战.我的Java知识非常可靠(包括Swing),并且没想到设置它会有这么大的困难.
我开始使用IntelliJ 13.0 Community Edition提供的JavaFX项目.我的Main类中的代码相对较小:
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application
{
@Override
public void start(Stage primaryStage) throws Exception
{
//getClass().getResource("../../resources/sample.fxml");
Parent root = FXMLLoader.load(getClass().getResource("../sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
我pom.xml也不是太大了:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>sample</groupId>
<artifactId>JavaFXDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<organization>
<name>RubberDucky</name>
</organization>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>2.0</version>
</plugin> …Run Code Online (Sandbox Code Playgroud)