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