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 应用程序生命周期,如Applicationjavadoc 中所述。
可能还会将 tomcat 初始化代码移至 appinit()方法中并存储 tomcat 服务器引用,以便稍后可以向其发送消息(例如,在不再需要时将其关闭)。
如果您想在应用程序完成时正常关闭 Tomcat 服务器,请stop()从应用程序stop()方法中调用服务器方法。如果您愿意,您可以在拨打电话后等待服务器正常关闭,但以稳健的方式执行此操作超出了我在此讨论的范围。
您可能可以完全摆脱您的Start类,只需将 main 方法放在 JavaFX 应用程序类中,然后使用它来启动您的应用程序。
根据您想要的集成质量,您可能可以添加更多逻辑来很好地同步 JavaFX 应用程序生命周期与 Tomcat 服务器Lifecycle,详细讨论此类集成超出了本答案的范围。
不要src从代码中引用目录
src\main是项目目录而不是运行时位置,您不应src直接从代码中引用该目录。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |