8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用 Spring Boot 和 React 应用程序在 Tomcat 上进行路由的问题

ray 2月前

141 0

我在 Tomcat 上遇到了路由问题。我收到了一个现成的 .war 文件,其中包含位于 resources/static 文件夹中的 React 应用程序的构建文件。使用 Maven 重建后,...

我在 Tomcat 上遇到了路由问题。我收到了一个现成的 .war 文件,其中包含位于 resources/static 文件夹中的 React 应用的构建文件。

使用 Maven 重建后,我得到了 .war 文件,并将其放在服务器上的 tomcat/webapps 目录中。我使用 /etc/init.d 启动服务,但即使我提供了 index.html 的确切路径,也会出现 404 错误。在 Tomcat 上,index.html 位于 apka/WEB-INF/classes/static,并且有一个包含 CSS、JS 文件等的 assets 文件夹。

所以,我的问题是,当访问 address-ip:port/apka 时,我应该在哪里编辑以显示 index.html 并确保每个端点都能正常运行?

就上下文而言,我还安装了 Logicaldoc,它运行良好。我尝试使用 classpath 配置 application.properties 并在 pom.xml 中设置 welcome-file,但我怀疑问题出在 Spring Boot 的配置中。

我正在使用 Java 21.0.3 LTS、Maven 3.8.7、SpringBoot CLI v3.3.1、React ^18.3.1、Tomcat 9.0.91 和 Debian 12。

感谢您的帮助!

我尝试通过添加以下内容来编辑 application.properties:

spring.web.resources.static-locations=classpath:/static/

我还尝试创建以下控制器:

@Controller
public class ResourceController {

    @GetMapping("/apka/**")
    public String apka() {
        return "forward:/index.html";
    }
}

我将所有文件从 assets 复制到 src/main/resources/static 并编辑了 vite.config.js,但放弃了。我还尝试了这个:

@Controller
public class HomeController {
    @RequestMapping(value = { "/", "/{x:[\\w\\-]+}", "/{x:^(?!api$).*$}/*/{y:[\\w\\-]+}" })
    public String getIndex() {
        return "forward:/index.html";
    }
}

当我导航到 https://address_ip:port/apka 时,出现 404 错误:“请求的资源 [/apka/] 不可用”。catalina.out 文件中没有关于“apka”的错误

帖子版权声明 1、本帖标题:使用 Spring Boot 和 React 应用程序在 Tomcat 上进行路由的问题
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由ray在本站《spring-boot》版块原创发布, 转载请注明出处!
最新回复 (0)
  • @J. Asgarov 关于 tomcat 10.* 的安装,我在 jakarta.* 的 javax.* 上遇到了问题,出现了很多错误,于是我放弃了 :/ 那么,为了以防万一,我该怎么做才能让它在 9.* 上运行?

  • 降级到 spring boot 2:) 但是你应该朝相反的方向发展,并更新你的代码以使用版本 3(应该像用 jakarta 替换所有 javax 一样简单)

  • 我正在尝试从 pdf 中提取表格,但表格的格式如下我正在尝试各种库(非结构化、pdfplumber、pymupdf 等),但它们都没有提供可读的

    我正在尝试从 pdf 中提取表格,但表格的格式如下

    我尝试了各种库(非结构化、pdfplumber、pymupdf 等),但没有一个能提供可读的格式。列标题被反向打印,如下所示

    知道我能做什么或可以使用哪些库吗?我是 Python 新手,所以这可能是一个愚蠢的问题。

    测试了非结构化(API 和非 API 版本)、pdfplumber、pdf2image、pymupdf,希望以任何格式进行解析,但应该正确读取列。

    我是否应该尝试编写代码来修改它,以便以水平格式打印列名?

    感谢编码员

  • 我正在尝试将嵌套列表解析为树。困难之处在于文本未缩进,所以我想知道是否有可以依赖的规则。1. a) i) 1)通常,我看到数字...

    我正在尝试将嵌套列表解析为树。困难之处在于文本未缩进,所以我想知道是否有可以依赖的规则。

    1.
      a)
        i)
          1)
    

    通常,我看到的是数字 -> 字母 -> 罗马数字。以下示例是否允许/有效?

    1.
      i)
        a)
    
    1.
      i) 
        A)
    

    (罗马数字的大写字母子列表)

    A)
      A)
        1.
          1.
    

    (\'A\' 是同一类型列表 \'A\' 的子项)

    • 
      1.
      2.
    •
      1.
    

    (1. 项目要点的子项)

    1.
      A)
        i)
      B)
        a.
    

    (\'i)\' 和 \'a.\' 是不同类型的列表)

    我找不到关于此主题的规则/指南。(有没有更好的地方可以询问?)

  • 我知道如果我想将一个字符串解析成单独的单词,最简单的方法是。这是我的字符串:Microsoft 业务分析软件代码:SELECT special_term, display_term FROM sys。

    我知道,如果我想将字符串解析成单独的单词,最简单的方法是。

    这是我的字符串:

    The Microsoft business analysis software
    

    代码:

    SELECT special_term, display_term 
    FROM sys.dm_fts_parser ('"The Microsoft business analysis software"', 1033, 0, 0)
    

    返回的是:

    special_term display_term
    ------------ ------------
    Noise Word   the
    Exact Match  microsoft
    Exact Match  business
    Exact Match  analysis
    Exact Match  software
    

    但是假设我有一个字符串,其中的一些单词用双引号引起来,如下所示:

    The Microsoft "business analysis" software
    

    我想要制作以下内容:

    special_term display_term
    ------------ ------------
    Noise Word   the
    Exact Match  microsoft
    Exact Match  business analysis
    Exact Match  software
    

    在 SQL Server 中是否有合理的方法可以做到这一点?

  • LF13 2月前 0 只看Ta
    引用 7

    段落编号完全是特定于领域的。法律、工程、科学等文档都可能有自己的惯例。想出一个能够正确识别所有可能标准的解析器将是启发式的,并且容易出错。一个简单的例子是

  • WSC 2月前 0 只看Ta
    引用 8

    尝试 使用 Python 的 Spire.PDF .

    pip install Spire.Pdf
    

    使用它从 PDF 中提取表格的方法如下:

    from spire.pdf.common import *
    from spire.pdf import *
    
    # Create a PdfDocument object
    doc = PdfDocument()
    # Load the sample PDF file
    doc.LoadFromFile("Table.pdf")
    
    # Create a list to store the extracted data
    builder = []
    
    # Create a PdfTableExtractor object
    extractor = PdfTableExtractor(doc)
    
    # Loop through the pages
    for pageIndex in range(doc.Pages.Count):
        # Extract tables from a specific page
        tableList = extractor.ExtractTable(pageIndex)
    
        if tableList is not None and len(tableList) > 0:
            # Loop through the tables in the list
            for table in tableList:
                # Get row number and column number of a certain table
                row = table.GetRowCount()
                column = table.GetColumnCount()
    
                # Loop through the row and column
                for i in range(row):
                    for j in range(column):
                        # Get text from the specific cell
                        text = table.GetText(i, j)
    
                        # Add the text to the list
                        builder.append(text + " ")
                    builder.append("\n")
                builder.append("\n")
    
    # Write the content of the list into a text file
    with open("Table.txt", "w", encoding="utf-8") as file:
        file.write("".join(builder))
    

    参考: https://www.e-iceblue.com/Tutorials/Python/Spire.PDF-for-Python/Program-Guide/Table/Python-Extract-Tables-from-PDF.html

    注意:我为开发该模块的公司工作。

  • Lay 2月前 0 只看Ta
    引用 9

    尝试使用 pdf2docx

    第一的 pip install pdf2docx

    然后像

    from pdf2docx import Converter
    
    def convert():
        cv = Converter('c:\\temp\\file.pdf')
        cv.convert('C:\\temp\\filename.docx', start=0, end=None)
        cv.close()
    

    相应地修改文件路径。

  • 我正在使用 SSMS 19.1。STRING_SPLIT 给出以下信息:消息 195,级别 15,状态 10,第 51 行 'string_split' 不是可识别的内置函数名称。

  • SSMS 版本就像说您正在使用 Windows 11。SQL Server 版本才是最重要的,运行:

  • Microsoft SQL Server 2016 (SP3-GDR) (KB5029186) - 13.0.6435.1 (X64) 2023 年 7 月 30 日 19:53:42 版权所有 (c) Microsoft Corporation Web 版 (64 位) Windows Server 2016 Standard 10.0(内部版本 14393:)(虚拟机管理程序)兼容级别为 120(这就是我看不到 SPLIT_STRING 的原因。虽然它无论如何都无济于事,但我不这么认为,因为文档没有显示它能够对引号中的短语做出例外。

  • 我们可以“暂时”用某个符号 ( _ ) 替换引用短语中的空格,然后在拆分后再替换回去。
    短语 "business analysis" -> business_analysis -> business analysis .

    sys.dm_fts_parser 将此 \'words\' 输出为 Exact Match .

    查看示例

    ID 句子
    1 微软的“商业分析”软件和其他“有用的程序”
    2 但是假设我有一个字符串,其中包含 \'一些单词\' 用双引号引起来,如下所示 - 字符串
    with data as(
      select 1 id
        ,'The Microsoft "business analysis" software And other "helpful programs"' sentence
      union all
      select 2 id
        ,'But suppose I have a string that has "some of the words" enclosed in double quotes like this - string'
    )
    

    递归替换 ' ' '_' 的短语并删除 "

    ,r as(
      select 0 lvl,id
         ,case when charindex('"',sentence)>0 
             and charindex('"',sentence,charindex('"',sentence)+1)>0
           then left(sentence,charindex('"',sentence)-1)
             +replace(substring(sentence,charindex('"',sentence)+1
                ,charindex('"',sentence,charindex('"',sentence)+1)-charindex('"',sentence)-1)
               ,' ','_')
           +right(sentence,len(sentence)-charindex('"',sentence,charindex('"',sentence)+1))
          else sentence
          end sentence
      from data
      union all
      select lvl+1,id
         ,case when charindex('"',sentence)>0 
             and charindex('"',sentence,charindex('"',sentence)+1)>0
           then substring(sentence,1,charindex('"',sentence)-1)
             +replace(substring(sentence,charindex('"',sentence)+1
                ,charindex('"',sentence,charindex('"',sentence)+1)-charindex('"',sentence)-1)
               ,' ','_')
           +substring(sentence,charindex('"',sentence,charindex('"',sentence)+1)+1,100)
          else sentence
          end sentence
      from r
      where charindex('"',sentence)>0 
    )
    select id,occurrence,special_term,replace(display_term,'_',' ')display_term 
           --,source_term ,group_id,phrase_id
    FROM (select *,row_number()over(partition by id order by lvl desc)rn from r)r
    cross apply  sys.dm_fts_parser ('"'+r.sentence+'"',1033,0,0)
    where rn=1
    

    输出

    ID 发生 特殊术语 显示术语
    1 1 干扰词
    1 2 完全符合 微软
    1 3 完全符合 商业分析
    1 4 完全符合 软件
    1 5 干扰词
    1 6 干扰词 其他
    1 7 完全符合 有用的程序
    2 1 干扰词
    2 2 完全符合 认为
    2 3 干扰词
    2 4 干扰词
    2 5 干扰词 A
    2 6 完全符合 细绳
    2 7 干扰词
    2 8 干扰词
    2 9 完全符合 一些词
    2 10 完全符合 封闭式
    2 11 干扰词
    2 12 完全符合 双倍的
    2 十三 完全符合 引号
    2 14 干扰词 喜欢
    2 15 干扰词
    2 16 完全符合 细绳
  • espc 2月前 0 只看Ta
    引用 14

    请尝试以下利用 SQL Server 的 XML 和 XQuery 功能的解决方案。

    它将从 SQL Server 2012 开始运行。

    它使用词语 标记 ,其中单词之间用空格分隔。

    转换的结果为中间 XML 如下所示:

    <root>
      <r>The</r>
      <r>Microsoft</r>
      <r>"business</r>
      <r>analysis"</r>
      <r>software</r>
    </root>
    

    XQuery FLWOR 表达式内部正在进行繁重的工作。

    SQL

    -- DDL and sample data population, start
    DECLARE @tbl TABLE (id INT IDENTITY PRIMARY KEY, words VARCHAR(1024));
    INSERT @tbl (words) VALUES
    ('The Microsoft "business analysis" software');
    -- DDL and sample data population, end
    
    SELECT t.*
        , z.value('.', 'VARCHAR(100)') AS result
    FROM @tbl AS t
    CROSS APPLY (SELECT TRY_CAST('<root><r><![CDATA[' + 
        REPLACE(words, SPACE(1), ']]></r><r><![CDATA[') + 
        ']]></r></root>' AS XML).query('
        for $x in /root/r/text()
             let $pos := count(root/r[. << $x])
             let $token1 := $x cast as xs:token?
             let $length1 := string-length($token1)
             let $token2 := (/root/r[$pos + 1]/text())[1] cast as xs:token?
             let $length2 := string-length($token2)
          return if (substring($token1,1,1)="""" and substring($token2,$length2,1)="""") 
             then <r>{data((substring($token1,2,100), substring($token2,1,$length2 - 1)))}</r>
             else if (substring($token1,$length1,1)="""") then ()
             else <r>{$token1}</r> 
    ')) AS t1(x)
    CROSS APPLY x.nodes('/r') AS t2(z);
    

    输出

    ID 结果
    1 微软的“商业分析”软件
    1 微软的“商业分析”软件 微软
    1 微软的“商业分析”软件 商业分析
    1 微软的“商业分析”软件 软件
  • 我也要试试这个。这两个答案都使用了远远超出我常识范围的 SQL,所以我要试一试,看看能否破解其中任何一个。非常感谢。

  • 嗯... 这个解决方案的问题在于,如果字符串中只有一个引号短语,它只会保留引号短语。对于像“这是所有短语中最好的一个,对吧?”这样的句子,它会拆分第二个引号短语中的单词。

  • 在提问时,你需要提供一个最小的可重现示例:(1)DDL 和示例数据填充,即 CREATE 表加上 INSERT T-SQL 语句。(2)你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。(3)所需的输出,基于上面 #1 中的示例数据。(4)你的 SQL Server 版本(SELECT @@version;)。

  • JvdV 2月前 0 只看Ta
    引用 18

    我正在尝试根据标题中所述的内容运行查询,选择彼此接近的记录,这两个记录的出生日期之间有差异,但没有成功,到目前为止,我已尝试从左到右查找...

    我试图根据标题中所述的内容运行查询,选择两个出生日期之间相近的记录,但没有成功

    到目前为止,我已经尝试从左到右查看,我想要的是仅返回当前用户发送帖子的日期之间的用户,以及距离之间的用户

    id | lat        | long       | age_birth
    1   47.55314000  -1.53200000  2011-07-05
    2   47.55314000  -1.53200000  2008-07-05
    3   47.55314000  -1.53200000  2008-07-05
    4 ....
    

    当前用户想要显示同一区域内(比如说半径 25 公里内)的其他用户,年龄在 20 到 35 岁之间。使用经纬度。我希望这很清楚,“我是法国人 ^^”

    if (!function_exists('Dot_Distance')) {
        function Dot_Distance($lat_u, $long_u, $or, $sex, $age, $age_tow, $age_olders, $uid, $distance){
          global $db;
          $latitude = $lat_u;
          $longitude = $long_u;
          $distance = $distance;
          $sagea = 'AND ('.$age_olders.' BETWEEN (YEAR(CURDATE())- ' . $age . ')  AND (YEAR(CURDATE())-' . $age_tow . '))';
    
    $query = $db->prepare("SELECT *,  (((acos(sin(( $latitude * pi() / 180)) *sin(( `lat_` * pi() / 180)) +
          cos(( $latitude * pi() /180 ))*cos(( `lat_` * pi() / 180)) * cos((( $longitude - `long_`) *
          pi()/180)))) * 180/pi()) * 60 * 1.1515 * 1.609344) as distance
          FROM `users`
          WHERE
          lat_ IS NOT NULL AND
          long_ IS NOT NULL
          AND
          orientation = '$or'
          AND sex = '$sex'
          $sagea // return 2008-07-05 / 2011-07-05
          AND id <> '$uid'
          HAVING distance < '$distance'
          ORDER BY distance * 1 ASC");
    
          $query->execute();
    
          $query = $query->fetchAll(PDO::FETCH_OBJ);
    
          // var_dump($sagea);
          return $query;
    
    
    }
    }
    // a not
    

    提前致谢

  • 引用 19

    我有一个使用 Springboot 和 Javafx 的个人程序。我一直在尝试获得更多创建 springboot 和 javafx 应用程序的技能。程序启动一个 fxml 页面,人们可以在其中更新个人...

    我有一个使用 Springboot 和 Javafx 的个人程序。我一直在尝试获得更多创建 springboot 和 javafx 应用程序的技能。程序启动一个 fxml 页面,人们可以在其中更新某人的记录,单击“保存”,然后将其保存到 mssql 数据库中。

    我正在尝试将新的人员记录保存到 mssql 数据库。

    人员实体.java

    @Entity
    @Getter
    @NoArgsConstructor(force = true)
    @Data
    @Table(name = "persons")
    public class PersonEntity {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "personID", nullable = false)
        private final Integer personID;
    
        @Column(name = "first_name")
        @Setter
        private String firstName;
        @Column(name = "last_name")
        @Setter
        private String lastName;
        @Column(name = "dob")
        @Setter
        private String dob;
    

    PersonRepo.java

    @Repository
    public interface PersonRepo extends JpaRepository<PersonEntity, String> {
        List<PersonEntity> findAll();
    }
    

    PersonService.java

    public interface PersonService{
        Optional<PersonEntity> save(PersonEntity personEntity);
        PersonEntity update(PersonEntity personEntity);
        PersonEntity findAll();
       
    }
    

    PersonServiceImpl.java

    
    @Service
    @RequiredArgsConstructor
    public class PersonServiceImplimplements PersonService {
        @Autowired
        private PersonRepo repo;
    
        @Override
        public Optional<PersonEntity> save(PersonEntity personEntity) {
            return Optional.of(repo.save(personEntity));
        }
    
        @Override
        public PersonEntity update(PersonEntity personEntity){ return repo.save(personEntity);}
    
        @Override
        public PersonEntity findAll() {
            return (PersonEntity ) repo.findAll();
        }
    }
    
    

    PersonController.java

    @Component
    public class PersonController {
     @Autowired
     PersonService personService;
     public TextField lName;
     public TextField fName;
     public TextField dob;
     public Button onSaveNewPerson;
    
       @FXML
        public void onSaveNewPerson(ActionEvent event) throws SQLException {
            if(fName != null){
                PersonEntity newPerson = new PersonEntity ();
                fName.setText(newPerson.getFirstName());
                personService.save(newPerson);
    
            }
    }
    

    人员记录.fxml

    <AnchorPane fx:id="scenePane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/20.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.example.controllers.PersonController">
        <Pane layoutX="-2.0" layoutY="91.0" prefHeight="800.0" prefWidth="1004.0">
            <Label layoutX="14.0" layoutY="14.0" text="New Person Form">
               <font>
                   <Font size="20.0"/>
               </font>
            </Label>
            <Label layoutX="14.0" layoutY="69.0" text="First Name"/>
            <Label layoutX="16.0" layoutY="130.0" text="Last name"/>
            <Label layoutX="18.0" layoutY="130.0" text="Date of Birth"/>
            <Label layoutX="20.0" layoutY="130.0" text="Address"/>
            <TextField fx:id="fName" layoutX="98.0" layoutY="66.0"/>
            <TextField fx:id="lName" layoutX="98.0" layoutY="126.0"/>
            <TextField fx:id="dob" layoutX="98.0" layoutY="146.0"/>
            <TextField fx:id="personAddress" layoutX="98.0" layoutY="166.0"/>
            <Button fx:id="saveNewPerson" layoutX="803.0" layoutY="333.0" mnemonicParsing="false"
                    onAction="#onSaveNewPerson" prefHeight="58.0" prefWidth="187.0" text="Save New Person"/>
            <Label layoutX="597.0" layoutY="70.0" text="DOB"/>
            <TextField fx:id="dob" layoutX="691.0" layoutY="66.0"/>
        </Pane>
    </AnchorPane>
    

    目前,单击 onSaveNewPersonbutton 后,我收到以下错误 -

    无法调用 \'com.example.services.PersonService.save(com.example.entity.persons.PersonEntity)\',因为 \'this.personService\' 为空

    我确实希望保存所有文本字段,但目前我只是使用 fname 字段进行测试。

    我已确保在控制器中为 personService 设置了 @Autowired。我还确保为 PersonRepo 设置了 @Repository。

    我还将 CommandLineRunner 实现添加到 FxApplication 文件中,并将测试人员添加到数据库中以确保正确连接。运行正常,人员输入成功。调查代码 -

    @SpringBootApplication
    @EnableJpaRepositories("com.example.repo")
    public class FxApplication extends Application implements CommandLineRunner {
        private ConfigurableApplicationContext springContext;
        private Parent root;
        @Autowired
        PersonRepo personRepo;
        public static void main(String[] args){
            launch(FxApplication.class, args);
        }
    
        @Override
        public void start(Stage stage) throws Exception {
            FXMLLoader fxmlLoader = new FXMLLoader();
            fxmlLoader.setControllerFactory(springContext::getBean);
            fxmlLoader.setLocation(getClass().getResource("/PersonsRecord.fxml"));
          
            Parent root = fxmlLoader.load();
            stage.setTitle("Add NewPerson");
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.show();
        }
    
        @Override
        public void init() throws Exception{
          springContext = SpringApplication.run(FxApplication.class);
    
        }
    
        @Override
        public void stop() throws Exception{
            springContext.close();
            Platform.exit();
        }
    
        @Override
        public void run(String... args) throws Exception {
            PersonEntity person = new PersonEntity ();
            person.setFirstName("TestSpring3");
            person.setLastName("LastNameTest4");
            person.setDOB("1/1/2000")
            personRepo.save(person);
    
        }
    }
    

    我编辑了我的代码并使用了@David Weber 提供的模板。

    这是我已经编辑的 FxApplicationLauncher.java 类。

    package com.example;
    
    import javafx.application.Application;
    import javafx.application.HostServices;
    import javafx.application.Platform;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.image.Image;
    import javafx.stage.Stage;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.context.*;
    import org.springframework.context.support.GenericApplicationContext;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    import org.springframework.stereotype.Component;
    
    import java.io.IOException;
    
    @SpringBootApplication
    @EnableJpaRepositories("com.example.repo")
    public class FxApplicationLauncher {
    
        public static void main(String[] args) {
            Application.launch(FxApplication.class, args);
        }
        public static class FxApplication extends Application {
            private ConfigurableApplicationContext context;
            @Override
            public void init(){
                ApplicationContextInitializer<GenericApplicationContext> initializer = applicationContext -> {
                    applicationContext.registerBean(Application.class, () -> FxApplication.this);
                    applicationContext.registerBean(Parameters.class, this::getParameters);
                    applicationContext.registerBean(HostServices.class, this::getHostServices);
                };
    
                this.context = new SpringApplicationBuilder()
                        .sources(FxApplicationLauncher.class)
                        .initializers(initializer)
                        .run(getParameters().getRaw().toArray(new String[0]));
            }
            @Override
            public void start(Stage stage)  { this.context.publishEvent(new StageIsReadyEvent(stage)); }
    
            @Override
            public void stop() throws Exception {
                context.close();
                Platform.exit();
                System.exit(0);
            }
    
            @Component
            public static class FxApplicationStageIsReadyListener implements ApplicationListener<StageIsReadyEvent>{
                @Value("${spring.application.name}")
                private  String applicationTitle;
                private ApplicationContext applicationContext;
    
                public void JfxSpringBootStageIsReadyListener(
                        @Value("${spring.application.name}") String applicationTitle,
                        ApplicationContext applicationContext) {
    
                    this.applicationTitle = applicationTitle;
                    this.applicationContext = applicationContext;
            }
    
                @Override
                public void onApplicationEvent(StageIsReadyEvent event) {
                    try {
                        FXMLLoader fxmlLoader = new FXMLLoader();
                        fxmlLoader.setLocation(getClass().getResource("/PersonsRecord.fxml"));
                        fxmlLoader.setControllerFactory(applicationContext::getBean);                
                        Parent root = fxmlLoader.load();
    
                        Scene scene = new Scene(root, 600, 600);
                        Stage stage = event.getStage();               
                        stage.setScene(scene);
                        stage.setTitle(this.applicationTitle);
                        stage.show();
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                }
    
            }
    
            public static class StageIsReadyEvent extends ApplicationEvent {
                public Stage getStage() {
                    return (Stage) getSource();
                }
    
                public StageIsReadyEvent(Stage source) {
                    super(source);
                }
            }
    
        }
    }
    

    由于某种原因,applicationContext 为空。

    java.lang.NullPointerException
    at java.base/java.util.Objects.requireNonNull(Objects.java:208)
    at com.example.gaitlabapp.FxApplicationLauncher$FxApplication$FxApplicationStageIsReadyListener.onApplicationEvent(FxApplicationLauncher.java:84)
    at com.example.gaitlabapp.FxApplicationLauncher$FxApplication$FxApplicationStageIsReadyListener.onApplicationEvent(FxApplicationLauncher.java:65)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:451)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:384)
    at com.example.gaitlabapp.FxApplicationLauncher$FxApplication.start(FxApplicationLauncher.java:51)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
    at java.base/java.lang.Thread.run(Thread.java:842)
    
  • 你能把错误的完整堆栈跟踪添加到你的问题中吗?当一个 bean 未启动时,通常是因为其他原因,如果你从下往上阅读,堆栈跟踪通常会显示它。

返回
作者最近主题: