Этот код должен создать фрейм, содержащий ярлык, который печатает часы. Метод zeitLaeuft()
заставляет часы работать и при запуске кнопки запускает часы. Когда я вызываю метод zeitLaeuft()
, код не работает. Я пробовал несколько вещей, и теперь я знаю, что это из-за метки jLUhr
. В методе zeitLaeuft()
выполняются два порядка, вызывающих метод jLUhr.setText()
. Я попытался установить текст метки и прокомментировать метод, но он не работает.JLabel setText() Метод не работает
В чем проблема?
package uhr;
import javax.swing.*;
import javax.swing.JLabel;
import java.awt.Font;
import java.awt.event.*;
import java.text.DecimalFormat;
import java.util.concurrent.TimeUnit;
public class Uhr1 extends javax.swing.JFrame {
public Uhr1() {
super();
initGUI();
}
private static JLabel jLUhr;
private static JButton jBtnStart;
private static int stunden = 0, minuten = 0;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Uhr1 uhr = new Uhr1();
uhr.setVisible(true);
uhr.setLocationRelativeTo(null);
}
});
}
public void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
this.setTitle("Uhr");
getContentPane().setLayout(null);
{
JLabel jLUhr = new JLabel(); //Uhr = clock in german
add(jLUhr);
jLUhr.setBounds(49, 89, 300, 100);
jLUhr.setHorizontalAlignment(SwingConstants.CENTER);
jLUhr.setVerticalAlignment(SwingConstants.CENTER);
}
{
JButton jBtnStart = new JButton();
add(jBtnStart);
jBtnStart.setBounds(49, 219, 80, 30);
jBtnStart.setText("Start");
jBtnStart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
start(evt);
}
});
}
pack();
setSize(400,300);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void zeitLaeuft() {
while(true) {
if(minuten < 60) {
int i;
try {
for(i = 0; i < 60; i++){
jLUhr.setText(Integer.toString(stunden) + " : " + Integer.toString(minuten)); //this is where the code fails
TimeUnit.SECONDS.sleep(1);
jLUhr.setText(Integer.toString(stunden) + " " + Integer.toString(minuten)); //this is where the code fails
}
minuten++;
i = 0;
} catch (Exception e) {
e.printStackTrace();
}
}
else if(minuten == 60) {
minuten = 0;
if(stunden < 24) {
stunden ++;
}
else {
stunden = 0;
}
}
}
}
public void start(ActionEvent evt) {
zeitLaeuft(); //this is where the code fails
}
}
1) * ".. код не работает." * Всегда копировать/вставлять ошибку и вывод исключения! 2) См. [Что такое трассировка стека и как я могу использовать ее для отладки ошибок моего приложения?] (Http://stackoverflow.com/q/3988788/418556) & [Что такое исключение Null Pointer и как это сделать? Я исправлю это?] (Http://stackoverflow.com/q/218384/418556) –
3) 'getContentPane(). SetLayout (null);' Java GUIs должны работать на разных ОС, размер экрана, разрешение экрана и т. Д. используя различные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –