fer*_*rck 13 java parameters javafx
我正在运行我的JavaFX应用程序:
public class MainEntry {
public static void main(String[] args) {
Controller controller = new Controller();
Application.launch(MainStage.class);
}
}
Run Code Online (Sandbox Code Playgroud)
MainStage
课程延伸Appication
.Application.launch
在一个特殊的FX线程中启动我的JavaFX窗口,但在我的main方法中,我甚至没有我的MainStage
类的实例.
如何将非String参数(在我的情况下为控制器)传递给MainStage
实例?这是一个有缺陷的设计吗?
这是我在别处找到的一个很好的例子
@Override
public void init () throws Exception
{
super.init ();
Parameters parameters = getParameters ();
Map<String, String> namedParameters = parameters.getNamed ();
List<String> rawArguments = parameters.getRaw ();
List<String> unnamedParameters = parameters.getUnnamed ();
System.out.println ("\nnamedParameters -");
for (Map.Entry<String, String> entry : namedParameters.entrySet ())
System.out.println (entry.getKey () + " : " + entry.getValue ());
System.out.println ("\nrawArguments -");
for (String raw : rawArguments)
System.out.println (raw);
System.out.println ("\nunnamedParameters -");
for (String unnamed : unnamedParameters)
System.out.println (unnamed);
}
Run Code Online (Sandbox Code Playgroud)
从JavaFX 9开始,您可以使用公共API来“手动”触发JavaFX平台的启动。唯一的缺点是该stop
方法的调用方式与通过Application.launch
以下方式启动的应用程序不同:
public class MainEntry {
public static void main(String[] args) {
Controller controller = new Controller();
final MainStage mainStage = new MainStage(controller);
mainStage.init();
Platform.startup(() -> {
// create primary stage
Stage stage = new Stage();
mainStage.start(stage);
});
}
}
Run Code Online (Sandbox Code Playgroud)
将Runnable
传递到Platform.startup
被调用JavaFX应用程序线程。
通常,除了传递给main的程序参数之外,不需要将参数传递给主应用程序.人们想要这样做的唯一原因是创建一个可重用的Application
.但Application
它不需要是可重用的,因为它是组装应用程序的代码片段.想想start
新方法main
吧!
因此,应用程序本身应该是配置程序并使用可重用的组件在方法中构建应用程序,而不是编写Application
在main
方法中配置的可重用项start
,例如:
public class MyApplication extends Application {
@Override
public void start(Stage stage) throws Exception {
// Just on example how it could be done...
Controller controller = new Controller();
MyMainComponent mainComponent = new MyMainComponent(controller);
mainComponent.showIn(stage);
}
public static void main(String[] args) {
Application.launch(args);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17206 次 |
最近记录: |