Thr*_*est 0 java tomcat javafx
我创建了一个项目,需要一个 tomcat 服务器来托管一个小网站。现在我想向该项目添加一个 JavaFX 应用程序。这也应该在 Tomcat 启动时启动,但不幸的是没有任何反应。FX 已添加到项目库中。
public class Start {
public static void main( String args[] )
{
try {
Tomcat tomcat = new Tomcat( );
String webappDirectory = new File( "src/main/webapp" ).getAbsolutePath( );
tomcat.setPort( 8080 );
Context context = tomcat.addWebapp( "", webappDirectory );
Tomcat.addServlet( context, "blockchain", new ServletContainer( new Applications( ) ) );
context.addServletMappingDecoded( "/blockchain/api/*", "blockchain" );
tomcat.start( );
tomcat.getServer( ).await( );
ConfigurationGui config = new ConfigurationGui();
Stage stage = new Stage();
config.start(stage);
}
catch ( Exception e )
{
e.printStackTrace( );
}
}
}
Run Code Online (Sandbox Code Playgroud)
应用级:
import javafx.application.Application;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class ConfigurationGui extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = new BorderPane();
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
}
Run Code Online (Sandbox Code Playgroud)
启动时不要等待()
这就是await()对 tomcat 服务器所做的事情:
等待收到正确的关闭命令,然后返回。
您声明希望在应用程序运行时 Tomcat 服务器也运行。因此,您不应在启动 JavaFX 应用程序之前等待服务器关闭。
使用 JavaFX 应用程序生命周期
start()
不应在 JavaFX 应用程序上直接调用,而launch()
应调用应用程序方法来启动应用程序。应该这样做,以便 JavaFX 应用程序和系统遵循 JavaFX 应用程序生命周期,如Application
javadoc 中所述。
可能还会将 tomcat 初始化代码移至 appinit()
方法中并存储 tomcat 服务器引用,以便稍后可以向其发送消息(例如,在不再需要时将其关闭)。
如果您想在应用程序完成时正常关闭 Tomcat 服务器,请stop()
从应用程序stop()
方法中调用服务器方法。如果您愿意,您可以在拨打电话后等待服务器正常关闭,但以稳健的方式执行此操作超出了我在此讨论的范围。
您可能可以完全摆脱您的Start
类,只需将 main 方法放在 JavaFX 应用程序类中,然后使用它来启动您的应用程序。
根据您想要的集成质量,您可能可以添加更多逻辑来很好地同步 JavaFX 应用程序生命周期与 Tomcat 服务器Lifecycle,详细讨论此类集成超出了本答案的范围。
不要src
从代码中引用目录
src\main
是项目目录而不是运行时位置,您不应src
直接从代码中引用该目录。
归档时间: |
|
查看次数: |
113 次 |
最近记录: |