好的,所以要启动 javafx 应用程序,我们需要启动 javafx 应用程序。然后,如果我们想添加一个新窗口,我们可以简单地执行 stageobj.show(); 正确的?
下面是我尝试创建新窗口的代码的一部分。我已经启动了我的应用程序并想从我的应用程序中调用这个新代码。
//imports all needed class
public String plugstart(){
try{Application.launch();
net.time4j.ui.javafx.CalendarPicker obj=net.time4j.ui.javafx.CalendarPicker.gregorianWithSystemDefaults();
javafx.scene.Scene scn=new javafx.scene.Scene(obj, 300, 250);
Stage stage = new Stage();
stage.setTitle("Date pick test");//scn.getChildren().add(obj);
stage.setScene(scn);
stage.show();
return "ok";}catch(Exception e){java.io.StringWriter sw = new java.io.StringWriter();
java.io.PrintWriter pw =new java.io.PrintWriter(sw);
e.printStackTrace(pw);return sw.toString();}
}
// not sure if this function is useful or not
@Override
public void start(Stage stage) {
try{Application.launch();
net.time4j.ui.javafx.CalendarPicker obj=net.time4j.ui.javafx.CalendarPicker.gregorianWithSystemDefaults();
javafx.scene.Scene scn=new javafx.scene.Scene(obj, 300, 250);
stage.setTitle("Date pick test");//scn.getChildren().add(obj);
stage.setScene(scn);
stage.show();
}catch(Exception e){}
}
证明它编译得很好。
:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest>javac -cp ;D:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest\*;D:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest *.java
D:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest>
好的,有什么问题吗?它应该可以正常工作吗?遗憾的是没有。下图是堆栈跟踪。 找不到显示类
谁有类似的经验或解决方案?
编辑1,好的,所以有人询问Java版本,我无法发表评论。
D:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest>java -version openjdk version "15" 2020-09-15 OpenJDK Runtime Environment (build 15+36-1562) OpenJDK 64-Bit Server VM (build 15+36) -1562,混合模式,共享)
jvm 抱怨 Testdategui.class 是的,这是我应该有这个新阶段的类。注意它实际上已经在执行第 7 行,但仍然抱怨找不到类。@@
非常感谢
edit2,基于亲爱的 jetspiking 建议。1,我试图确保没有启动应用程序两次。删除了启动废话。2,确保它实际上是使用 javafx 线程与 javafx.application.Platform.runLater
Walah,猜猜发生了什么?它实际上返回“ok”。但是,ui 不存在。(呜咽)
新功能状态>
public String plugstart(){
try{
javafx.application.Platform.runLater(new Runnable(){public void run(){
net.time4j.ui.javafx.CalendarPicker obj=net.time4j.ui.javafx.CalendarPicker.gregorianWithSystemDefaults();
javafx.scene.Scene scn=new javafx.scene.Scene(obj, 300, 250);
Stage stage = new Stage();
stage.setTitle("Date pick test");//scn.getChildren().add(obj);
stage.setScene(scn);
stage.show();
}});
return "ok";}catch(Exception e){java.io.StringWriter sw = new java.io.StringWriter();
java.io.PrintWriter pw =new java.io.PrintWriter(sw);
e.printStackTrace(pw);return sw.toString();}
}
好的,我尝试了解决方案并对其进行了调整。我认为它应该可以工作,但是我有 classnotfound 异常。
我认为这是我自己的类路径设置问题而不是回答问题,所以我会接受答案。
对于那些好奇的人,现在我有了这个新错误。如果我使用“全新的类”。
:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest\test3basedonSO_menoguide>java -cp %newcp%--module-path %newcp% --add-modules=all-modules Testdategui
Error: Could not find or load main class ;D:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest\test3basedonSO_menoguide\*;D:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest\test3basedonSO_menoguide
Caused by: java.lang.ClassNotFoundException: ;D:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest\test3basedonSO_menoguide\*;D:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest\test3basedonSO_menoguide
D:\Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest\test3basedonSO_menoguide>
参考src,应该可以吗?但我这边有问题
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.application.Application;
public class Testdategui extends Application
{
@Override
public void start(Stage primaryStage) throws Exception {
// Launch all your JavaFX code and methods from inside this Entry Point function.
Stage stage = new Stage();
Scene scene = new Scene(net.time4j.ui.javafx.CalendarPicker.gregorianWithSystemDefaults());
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
编辑 4,抱歉模块路径中没有空格但出现新错误。我会自己尝试搜索答案
java -cp %newcp% --module-path %newcp% --add-modules=all-modules Testdategui 引导层初始化时出错 java.nio.file.InvalidPathException: Illegal char <*> at index 104: D: \Coding\JavaSourceCode\plugin\userareaplugin\otherpartylibderived\time4jtest\test3basedonSO_menoguide*
最后编辑,worked.java -cp %newcp% --module-path %cd% --add-modules ALL-MODULE-PATH Demo
谢谢你。