アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるサイトを参考にして作ってみたんですが
うまく動いてくれません、多分おかしいところだらけですが
どこがダメか教えてもらえるとありがたいです

package timeP;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;



public class timeC extends JFrame implements Runnable {

private JPanel contentPane;
private JTextField textField;
private Thread th = null;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {

try {
timeC frame = new timeC();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}


}
});
}

/**
* Create the frame.
*/
public timeC() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 85);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.X_AXIS));




JPanel panel_3 = new JPanel();
contentPane.add(panel_3);
panel_3.setLayout(new BorderLayout(0, 0));

textField = new JTextField();
panel_3.add(textField, BorderLayout.CENTER);
textField.setColumns(10);


JPanel panel_2 = new JPanel();
contentPane.add(panel_2);
panel_2.setLayout(new BorderLayout(0, 0));

JButton JButtonstart = new JButton(" 開始 ");
JButtonstart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

if ( th == null ) {
th = new Thread ( );
th.start();
}

}
});
panel_2.add(JButtonstart, BorderLayout.CENTER);

JPanel panel_1 = new JPanel();
contentPane.add(panel_1);
panel_1.setLayout(new BorderLayout(0, 0));

JButton JButtonstop = new JButton(" 停止 ");
JButtonstop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {

if ( th != null ){
th = null;
}

}
});
panel_1.add(JButtonstop, BorderLayout.CENTER);

JPanel panel = new JPanel();
contentPane.add(panel);
panel.setLayout(new BorderLayout(0, 0));

JButton btnNewButton_2 = new JButton("New button");
panel.add(btnNewButton_2, BorderLayout.CENTER);

}

@Override
public void run() {
//TODO 自動生成されたメソッド・スタブ

int i;

while ( th != null ){
i = Integer.parseInt( textField.getText() );

try {
Thread.sleep(10000);
if ( th == null ) break;
}

catch ( InterruptedException e ){
break;
}

textField.setText( Integer.toString( i + 1 ) );

}
}
}

A 回答 (1件)

1点だけコメントします。



awt/swingでは特定のスレッドでのみGUIコンポーネントの操作が許されます。そのスレッドはEDTといいます。EDTとは別のスレッドでGUIコンポーネントの操作をしたい場合は

SwingUtilities.invokeLater(new Runnable() {
 @Override
 public void run() {
  textField.setText(...); //ここに書いたことはEDT上で実行してくれます
 }
}

のようにすることになっています。(操作の完了を待ちたいならinvokeAndWaitメソッドのAPI documentを参照ください)
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!