【发布时间】:2021-10-18 22:02:36
【问题描述】:
请记住,我是 Java 新手,并且只将 C# 用于桌面应用程序。
我刚刚做了一个全新的项目,想在窗口打开时加载内容,我有一个带有 JPanel(swing) 的 JFrame,我测试了很多东西,直到我发现 windowOpened 相当于 @来自 C# 的 987654325@ 方法,尝试使用此事件加载内容时出现问题,经过多次尝试后我没有得到任何东西,所以我去了基本并调用了 System.out.print("Test");。
JFrame 加载成功,但消息没有显示在控制台中,直到我关闭窗口,然后添加了一个按钮来播放并添加相同的打印,当单击该按钮时,我在控制台中什么也没有,直到我发送垃圾邮件大概 5 到 6 次,有点奇怪,所以我在打印后添加了 showMessageDialog,令我惊讶的是,消息对话框按预期工作,但打印仍然无法正常工作,直到我多次发送垃圾邮件。
这是我尝试加载内容的第三个全新项目,但所有项目似乎都以相同的方式工作,这是我的计算机问题还是 java 的正常行为?我可以改变这种行为吗?这样做的正确方法是什么?
这是控制台日志:
cd PATH\NetBeansProjects\mavenproject1; "JAVA_HOME=C:\\Program Files\\Java\\jdk-16.0.2" cmd /c "\"PATH" -Dexec.vmArgs= -Dexec.args=\"${exec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs}\" -Dexec.appArgs= -Dexec.mainClass=.mavenproject1.NewJFrame -Dexec.executable=\"PATH" -Dmaven.ext.class.path=\"PATH"
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.
Scanning for projects...
-----------------------< mavenproject1 >------------------------
Building mavenproject1 1.0
--------------------------------[ jar ]---------------------------------
--- exec-maven-plugin:3.0.0:exec (default-cli) @ mavenproject1 ---
not working as expectednot working as expectednot working as expectednot working as expectednot working as expectednot working as expectednot working as expectednot working as expectednot working as expectednot working as expectednot working as expectednot working as expected
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 13.098 s
Finished at: 2021-08-16T17:14:40-05:00
------------------------------------------------------------------------
这里是代码:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package .mavenproject1;
import javax.swing.JOptionPane;
/**
*
* @author
*/
public class NewJFrame extends javax.swing.JFrame {
/**
* Creates new form NewJFrame
*/
public NewJFrame() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jButton1 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowOpened(java.awt.event.WindowEvent evt) {
formWindowOpened(evt);
}
});
jButton1.setText("jButton1");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(196, Short.MAX_VALUE)
.addComponent(jButton1)
.addGap(131, 131, 131))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(196, Short.MAX_VALUE)
.addComponent(jButton1)
.addGap(79, 79, 79))
);
pack();
}// </editor-fold>
private void formWindowOpened(java.awt.event.WindowEvent evt) {
System.out.print("not working as expected");
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
System.out.print("not working as expected");
javax.swing.JOptionPane.showMessageDialog(this,"","",JOptionPane.OK_OPTION);
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
// End of variables declaration
}
【问题讨论】:
-
缓冲输出。将
print更改为println -
一个问题是当您不了解 GUI 如何与 Swing 一起使用时,您正在使用 GUI Builder。 Oracle 有一个 rad 教程,Creating a GUI With Swing,它将教您如何使用 Swing。跳过 Netbeans 部分。
-
@apangin 让它工作,谢谢。您是否有任何文章或 javadoc 可以让我了解更多信息,我正在查看 javadoc 但只找到了这个:docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/…
-
见
PrintStream(这是System.out流的类型)。 -
如果您解决了您的问题,请发布并接受您自己问题的答案,以将此页面标记为已解决。您可能会帮助未来的读者。
标签: java performance swing background