Java 如果最小化,Swing应用程序会崩溃

Java 如果最小化,Swing应用程序会崩溃,java,swing,swingworker,Java,Swing,Swingworker,我的swing应用程序有问题 我有一个SwingWorker,里面有一个for循环,它启动300多个oracle数据库请求,并用结果填充几个JTables 如果我保持swing应用程序窗口不最小化,或者至少在windows资源管理器中部分可见,则批处理可以正常完成。现在,如果我最小化应用程序,然后返回swing应用程序,它将被冻结 基本轮廓和颜色的组成部分将是可见的,大部分窗口将只是背景颜色我设置为它(黑色),没有文字将是可见的。终止应用程序的唯一方法是终止进程,因为我单击“X”按钮不会关闭窗口

我的swing应用程序有问题

我有一个
SwingWorker
,里面有一个for循环,它启动300多个oracle数据库请求,并用结果填充几个
JTable
s

如果我保持swing应用程序窗口不最小化,或者至少在windows资源管理器中部分可见,则批处理可以正常完成。现在,如果我最小化应用程序,然后返回swing应用程序,它将被冻结

基本轮廓和颜色的组成部分将是可见的,大部分窗口将只是背景颜色我设置为它(黑色),没有文字将是可见的。终止应用程序的唯一方法是终止进程,因为我单击“X”按钮不会关闭窗口

这是一个普遍的问题吗?你如何预防它

批处理工作程序内的循环:

for(int i=1; i<=maxDepth; i++){
    String[] result = getAllLists(database, i);
    for(int j=0; j<result.length; j++){
        String period=result[j];
        for(String name : names){
            System.out.println("New Query: "+name+ " " + period + " | " + "Loading " + (days) + " days x " + years + " years --- ");
            if(isValid(period,name)){
                List<TickHistory> queryResult = model.getByDaysMultiple(name,period,days+mod+daysHeadroom,years, false);
                getModelTableData(name, period, DatabaseHelpers.dateToString(lastCob), years,days,queryResult);
                populatePricesTable(queryResult, days, false);
                view.setNameText(name);
                view.setPeriodText(period);
            }else{
                System.out.println("query invalid");
            }
        }
    }
}
for(int i=1;i
我不在代码中的任何地方使用
publish
process

这可能是问题的根源。依赖于在
doInBackground()
中调用
publish()
,并使用
process()
更新事件调度线程上的
TableModel
。将检查一个完整的示例


请给我们看一些代码好吗?可能您缺少
SwingUtilities.invokeLater()
。使用jvisualvm检查应用程序也会有所帮助。有任何异常吗?您是否正确使用了
发布
过程
。@TamasRev我在主进程中使用invokelater,在主进程中创建主框架、控制器和用于连接到应用程序的对象database@CatalinaIsland我会检查例外情况,当我看到红色时,我看不到它们将所有控制台输出直接输出到GUI文本框。我的代码中没有使用“发布”和“无处处理”。我在问题中添加了批处理工作程序内部的循环。您可以看到从db提取数据的方法
getByDaysMultiple
,然后是
getModelTableData
,它触发另外几个请求,然后是
populatePricesTable
填充JTable,以及下面的一些查看方法。这是我的第一个swing应用程序,因此我感谢您的解释。您不能从
doInBackground()
更新
TableModel
。您必须将代码重新分解为
publish()
中间结果如中所示。如果您有问题,请编辑您的问题,根据显示您的方法的,包括一个。