gpt4 book ai didi

Java:当两者都在同一个包中时,如何从当前应用程序启动独立应用程序?

转载 作者:行者123 更新时间:2023-11-29 03:05:24 28 4
gpt4 key购买 nike

这看起来应该很简单,所以我一定遗漏了一些明显的东西:我在同一个包中有 4 个独立的应用程序,us.glenedwards.myPackage,

  • myClass1 扩展应用程序
  • myClass2 扩展应用程序

等...

我需要每个类都充当其自己的独立应用程序。但是我希望能够通过单击链接从我所在的类(class)开始其他 3 个类(class)。 Android 允许我使用 Intents 执行此操作:

Intent intent = new Intent(this, EditData.class);
overridePendingTransition(R.layout.edit_data_scrollview, R.layout.state);
startActivity(intent);

我试过使用 myClass1 从 myClass2 开始

myClass2.launch("");

但是我得到一个错误,“应用程序启动不能被调用超过一次”。让它工作的唯一方法是从 myClass2 中删除“扩展应用程序”和 start() 方法,这意味着 myClass2 不再是一个独立的应用程序。

我如何从 myClass1 启动 myClass2、myClass3 或 myClass4,而这 4 个都是独立的应用程序?

最佳答案

可以通过直接在 Application 子类之一的新实例上调用 start(...) 来完成这项工作,但是这有点像 hack,并且与 start(...) 方法的预期用途相反。 (就语义而言:Application 类中名为 start 的方法应该在您的应用程序启动时执行,而不是在它已经运行后的某个任意点执行。)

您真的应该将 start 方法视为传统 Java 应用程序中 main 方法的替代品。如果您有一个应用程序调用另一个应用程序的 main 方法,您会(希望)得出这样的结论:您的结构不正确。

所以我建议重构您的设计,使您的各个组件不是应用程序子类,而只是普通的旧常规类:

public class FirstModule {

// can be any Parent subclass:
private BorderPane view ;

public FirstModule() {

// create view; you could also just load some FXML if you use FXML
view = new BorderPane();

// configure view, populate with controls, etc...

}

public Parent getView() {
return view ;
}

// other methods as needed...
}

并且,类似地,

public class SecondModule {

private GridPane view ;

public SecondModule {

view = new GridPane();
// etc etc
}

public Parent getView() {
return view ;
}
}

现在你可以做类似的事情了

FirstModule firstModule = new FirstModule();
Scene scene = new Scene(firstModule.getView());
Stage stage = new Stage();
stage.setScene(scene);
stage.show();

任何你需要做的地方。因此,您可以为每个模块创建独立的应用程序:

public class FirstApplication extends Application {

@Override
public void start(Stage primaryStage) {
Scene scene = new Scene(new FirstModule().getView());
primaryStage.setScene(scene);
primaryStage.show();
}
}

或者您可以将它们实例化为更大应用程序的一部分:

public class CompositeModule {

private HBox view ;

public CompositeModule() {

Button first = new Button("First Module");
first.setOnAction(e -> {
Parent view = new FirstModule().getView();
Scene scene = new Scene(view);
Stage stage = new Stage();
stage.initOwner(first.getScene().getWindow());
stage.setScene(scene);
stage.show();
});

Button second = new Button("Second Module");
second.setOnAction(e -> {
Parent view = new SecondModule().getView();
Scene scene = new Scene(view);
Stage stage = new Stage();
stage.initOwner(second.getScene().getWindow());
stage.setScene(scene);
stage.show();
});

HBox view = new HBox(10, first, second);
view.setAlignment(Pos.CENTER);

}

public Parent getView() {
return view ;
}
}

public class CompositeApplication extends Application {
@Override
public void start(Stage primaryStage) {

Scene scene = new Scene(new CompositeModule().getView(), 360, 150);
primaryStage.setScene(scene);
primaryStage.show();
}
}

我的想法是,Application 子类代表整个正在运行的应用程序。因此,每个 JVM 只实例化一个这样的类一次是有意义的,因此您应该考虑这些本质上不可重用。将您想要重用的任何代码移到某个地方的不同类中。

关于Java:当两者都在同一个包中时,如何从当前应用程序启动独立应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32464698/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com