public void init(){
System.out.println("Thread Preloader ID:"+ Thread.currentThread().getId());
System.out.println(" ------ ");
Pane effectRegion = LoaderFrame.getInstance().getEffectPane();
JFXFillTransition fill = new JFXFillTransition();
fill.setDuration(Duration.millis(400));
fill.setRegion(effectRegion);
fill.setAutoReverse(true);
fill.setCycleCount(Animation.INDEFINITE);
fill.setFromValue(Color.WHITE);
fill.setToValue(Color.rgb(0,77,147));
fill.play();
}
@Override
public void start(Stage primaryStage){
System.out.println("Thread Preloader(start) ID:"+ Thread.currentThread().getId());
System.out.println(" ------ ");
LoaderFrame.getInstance().show();
}
public class LoaderFrame extends Stage {
public static LoaderFrame getInstance(){
return instance;
}
private Scene scene;
private AnchorPane root;
private BorderPane wraper;
private StackPane effectPane;
private JFXButton loaderPathButton;
public LoaderFrame(){
initScene();
this.initStyle(StageStyle.TRANSPARENT);
this.getIcons().add(new Image("file:imgs/favico/icon48.png"));
}
public void initScene(){
FXMLLoader loader = new FXMLLoader(Main.class.getResource("xml/loader_frame.fxml"));
root = null;
try {
root = loader.load();
wraper = (BorderPane) root.lookup("#rootPane");
loaderPathButton = (JFXButton) root.lookup("#loaderPathButton");
effectPane = (StackPane) root.lookup("#effectPane");
scene = new Scene(root);
scene.setFill(Color.TRANSPARENT);
scene.getStylesheets().add("file:css/loader.css");
this.setScene(scene);
} catch (IOException e) {
e.printStackTrace();
}
}
public Pane getEffectPane(){
return effectPane;
}
}
要研究preloader
生命周期,可以将以下行添加到preloader
类中:
@Override
public void handleStateChangeNotification(StateChangeNotification info) {
System.out.println("state: " + info.getType());
}
在应用程序
类中,可以在init
/start
方法中添加system.out.prinln
消息。这将显示preloader
通过其不同状态运行:before_load
、before_init
、before_start
。
当JavaFXThread
调用preloaders start方法
时,必须将对thread.sleep
的调用封装在platform.runlater
中。
public class App extends Application {
private static final int PRELOADER_SHOWTIME_MILLIS = 2000;
@Override
public void init() throws Exception {
long start = System.currentTimeMillis();
// time consuming initializations
long duration = System.currentTimeMillis() - start;
long remainingShowTime = PRELOADER_SHOWTIME_MILLIS - duration;
if(remaingShowTime > 0 ){
Thread.sleep(remainingShowTime);
}
}
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane(new Label("application"));
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
public class TestPreloader extends Preloader {
private Stage stage;
@Override
public void start(Stage primaryStage) throws Exception {
stage = primaryStage;
Rectangle rect = new Rectangle(200, 200, Color.RED);
FadeTransition transition = new FadeTransition(Duration.seconds(2), rect);
transition.setFromValue(0);
transition.setToValue(1);
Label lbl = new Label("preloader");
StackPane root = new StackPane(rect, lbl);
primaryStage.setScene(new Scene(root));
primaryStage.show();
transition.play();
}
@Override
public void handleStateChangeNotification(StateChangeNotification info) {
if (info.getType() == Type.BEFORE_START) {
stage.hide();
}
}
}
public class Main {
public static void main(String[] args) {
LauncherImpl.launchApplication(App.class, TestPreloader.class, args);
}
}
我的IDE是Intellij。我尝试了这个文档来学习预加载器,但由于某些原因,预加载器从来没有从我的主类中调用过,甚至它的方法也没有被调用过。
问题内容: 在Java 8中,我可以使用以下方法使用预加载器启动JavaFX应用程序: 我更喜欢从上面的代码开始,而不是使用部署配置,因为我不希望图形界面在每次启动应用程序时都启动,而只是在一些计算出应用程序应该在其中运行的代码之后才启动GUI模式。 我使用的是“ com.sun.javafx.application.LauncherImpl”类,但显然在Java 9中,所有以“ com.sun”
我原以为这是一个简单的问题,但我很难找到答案。我有一个与JavaFX场景对象关联的ImageView对象,我想从磁盘加载大图像,并使用ImageView一个接一个地显示它们。我一直在努力寻找一种好方法来反复检查图像对象,当它在后台加载完成时,将其设置为ImageView,然后开始加载新的图像对象。我提出的代码(如下)有时有效,有时无效。我很确定我在JavaFX和线程方面遇到了问题。它有时加载第一个
testFX。java: testFXController.java: 测验fxml: 当我运行testFX. java时,系统打印: 这是教授的代码,我似乎无法运行它。我意识到主要问题在代码
我试图使用neo4j中的命令从CSV文件中导入大约500,000行数据。 下面是我正在使用的代码: 期望的行为:第一次出现以另一个艺术家为特征的人会创建关系,并且应该将关系的属性设置为1。对于随后的每一次事件,强度属性将增加1。因此,经常以艺术家B为特色的艺术家A应该具有类似的关系 关系是方向性的,在这种情况下,方向性很重要(A以B为特征不同于B以A为特征)。 在确定问题时,是否有其他有用的信息?
在JavaFX中,我使用stage1从一个阶段切换到另一个阶段。隐藏();第二阶段。show(); 然而,第二阶段相当大,包含了一大堆元素。所以当我显示()它时,当它第一次弹出时,有一段400毫秒的时间,整个阶段是空的和灰色的。然后所有的元素都出现了。 太难看了。这是在i7上,有一个非常好的图形处理器。 我已经注意到,如果我展示它,然后隐藏它,然后再次展示它,最终的节目从它出现在屏幕上的那一刻起就