我有一个sqlite db的接口。一切正常,除了两个JLabel不会显示它们应该是什么。它在netbeans中运行,没有例外。但是当我从命令行运行它时,它不会将文本设置为JLabel,而只有这两个JLabel(vanOil& VanTires)。任何人都有任何线索的原因?
public class MaintenanceDB {
String van = (String) TabbedPane.chooseVan.getSelectedItem();
public void checkVan() throws Exception {
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager
.getConnection("jdbc:sqlite:office.sqlite");
Statement stat = conn.createStatement();
ResultSet rs = stat
.executeQuery("Select * from Maintenance WHERE Van IS " + van
+ ";");
int totalMiles = Integer.parseInt(TabbedPane.vanMiles.getText());
int lastOil = rs.getInt("LastOilChange");
int lastTire = rs.getInt("LastTireRotation");
int tireIndex = 5;
int oilIndex = 5;
int nextTire = lastTire + tireIndex;
int nextOil = lastOil + oilIndex;
boolean checkOil = CheckMaintenance.checkOil(totalMiles, nextOil);
boolean checkTire = CheckMaintenance.checkTire(totalMiles, nextTire);
int oilDiff = Math.abs(nextOil - totalMiles);
int tireDiff = Math.abs(nextTire - totalMiles);
String displayOil = van + " not due for oil change for " + oilDiff
+ " miles.";
String displayTire = van + " not due for tire totation for " + tireDiff
+ " miles.";
if (checkOil) {
displayOil = "**Van " + van + " " + oilDiff
+ " miles overdue for oil change**";
}
if (checkTire) {
displayTire = "**Van " + van + " " + tireDiff
+ " miles overdue for tire rotation*";
}
rs.close();
conn.close();
TabbedPane.vanOil.setText(displayOil);
TabbedPane.vanTires.setText(displayTire);
}
}
*的 修改 ** * ** * ****
if(command.equals(TabbedPane.setMiles.getText())){
try {
MaintenanceDB mdb=new MaintenanceDB();
mdb.checkVan();
} catch (Exception ex) {
Logger.getLogger(CallsEvent.class.getName()).log(Level.SEVERE, null, ex);
}
}
答案 0 :(得分:1)
添加以下代码行
System.out.println( "displayOil :" + displayOil );
在创建每个变量之后。你会知道你的代码是否到达那里。
如果消息未输出到控制台,则异常会中断您的代码。
否则,您的方法有
throws Exception
声明。这不是很好的代码实践,因为我们不知道该方法可以抛出的异常(因此,它可能存在问题)。您应该在异常声明中更具体:例如。
throws JDBCException, BusinessException
这样,你就会知道从中得到什么。此外,永远不要做
catch(Exception ex) {}
由于这一行,您可以节省数小时和几天的调试时间(取决于项目的大小)。如果你真的不知道该怎么做,要么写入堆栈重新抛出一个RTex传递它的原始原因异常
throw new RuntimeException("don't know what to do here", ex);
最诚挚的问候, 齐德哈姆迪 - http://1vu.fr