今日はJavasHotswapを試しましたが、非常にうまく機能しています。私のテスト中に、私はかなり奇妙な振る舞いに出くわしました。これは私のコードです:
public class Test extends JFrame implements ActionListener{
private JButton c;
private int f =1;
/**
* @param args
*/
public static void main(String[] args) {
Test t = new Test();
}
public Test(){
this.setPreferredSize(new Dimension(800, 600));
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
c = new JButton("Click");
c.addActionListener(this);
this.add(c);
this.pack();
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
c.setText(String.valueOf(f++));
}
}
c.setText(String.valueOf(f++));
終わり近くの線に注意してください。プログラムの実行中にこれを切り替えるとf--
、変更後のボタンの最初のクリックで、値がまだカウントアップしていることに気付きます。ただし、その後のクリック数は正しくカウントされています。元に戻すときにも同じことが起こります。
次に気付いたのは、コードを次のように変更した場合c.setText(String.valueOf(f+=1));
、JVMを実行し、c.setText(String.valueOf(f-=1));
クリック遅延なしで変更が直接適用されるようにホットスワップします。
私の質問は今です:この振る舞いを正確に引き起こすのは何ですか?そして、JVMコードレベルf++
との違いは何ですか?f+=1