私はfedora 14で開発したJavaスイングアプリケーションを持っています。アプリケーションはfedora 14で問題なく正常に動作しています。しかし、Windows 7で試したところ、正しく動作しませんでした。メニューバーには親メニュー項目が表示されますが、親メニュー項目をクリックしてもメニューは表示されず、タブ付きペインは黒で表示されます。システムがフリーズしているように見えます。これを widows XP で試してみたところ、グラフィックスで同じ結果が得られました。アプリケーションのエラーの原因を教えてください。
これが開始点のコードです。
public class SplashScreen extends javax.swing.JFrame {
String filePath = File.separator;
static final Logger logger = Logger.getLogger(SplashScreen.class);
/** Creates new form SplashScreen */
public SplashScreen() {
initComponents();
setSize(400, 250);
setLocationRelativeTo(null);
try {
initSetup();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void initSetup() throws Exception {
new Thread(new Runnable() {
@Override
public void run() {
Connection con = null;
try {
Thread.sleep(1000);
con = JDBCConnectionPool.getInstance().checkOut();
if (con == null) {
lblMessage.setText("No database connection found!");
logger.debug("No database connection found!");
} else {
lblMessage.setText("Loading the system...");
}
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, ex.getLocalizedMessage());
logger.debug(ex.getMessage());
} finally {
if (con != null) {
try {
PropertyConfigurator.configure(this.getClass().getClassLoader().getResource("conf/log4j.properties"));
logger.info("Starting the system!");
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, e.getLocalizedMessage());
}
new Login().setVisible(true);
dispose();
JDBCConnectionPool.getInstance().checkIn(con);
return;
}
lblMessage.setText("Error occured... exiting the system");
try {
Thread.sleep(500);
System.exit(0);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}).start();
}
ログイン画面
/** Creates new form Login */
public Login() {
userAuth = new UserAuthentication();
initComponents();
add(pnlControlls);
addButtonListeners();
addTextFieldListeners();
setSize(400, 250);
setTitle("Loging");
//pack();
setLocationRelativeTo(null);
}
private void login() {
txtAlert.setText("");
UserDTO user = new UserDTO();
char[] p = txtPassword.getPassword();
String pw = "";
for (int i = 0; i < p.length; i++) {
pw = pw + p[i];
}
user.setUsername(txtUsername.getText());
user.setPassword(StringHasher.getInstance().getHash(pw));
UserDTO authUser = userAuth.authenticate(user);
if (authUser == null) {
txtAlert.setText("<html>Internal error...</html>");
} else {
if (authUser.getIsActive() && authUser.isIsAvailable()) {
Main main = Main.getInstance();
CurrentUser.getInstance().setUserName(authUser.getUsername());
Main.getInstance().setUserName(authUser.getUsername());
Main.getInstance().setFullNameOnUserName(authUser.getFullName());
Main.getInstance().prepareMenu();
Main.getInstance().setVersion(System.getProperty("version"));
main.setVisible(true);
SwingUtilities.updateComponentTreeUI(main);
this.dispose();
//here Main is the main user gui interface which user interacts with
} else if (!authUser.getIsActive() && authUser.isIsAvailable()) {
txtAlert.setText("<html>User account is inactive!</html>");
} else {
txtAlert.setText("<html>Username or password is incorrect, <br> please check again.</html>");
}
}
}
アプリケーションを最小化および最大化すると、ドロップダウン メニューが表示されることがありますが、以下のようにメニューが重なって表示されます。