前提・実現したいこと
Rasberry pi 3上で複数のImageをきれいにスクロールさせたいのです。
発生している問題・エラーメッセージ
Rasberry pi 3とwindows10でImageにPNGファイルをロードしてタイマーイベント(約10ms)でスクロールさせていますが、移動がギクシャクしてしまいますが、paint内でrepaintする部分を変えるときれいになります。
windowsだと全て正常に見えますが、
raspbery pi 3のrasbianだとrepaintの範囲を変えるとスクロールが飛んだり軌跡が残ったり色々です。
なぜでしょうか?
また、NetBeansをwindowsパソコンからrasbianへリモート接続して実行していますが、rasbian上で直接実行しても表示状態が変わります。
package javaapplication; import java.awt.*; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.swing.*; /** * * @author */ public class JavaApplication extends JFrame { static int Y1,Y2; static Frame frame; ImageIcon icon; public JavaApplication() { // ### up.png...300-dot x 300-dot,32bit color PNGファイル ### // icon=new ImageIcon("D:\up.png"); // windows用 icon=new ImageIcon("/home/pi/NetBeansProjects/up.png"); // Linux用 JLabel label=new JLabel(icon); Y1=0; Y2=0; Timer t = new Timer(); // t.scheduleAtFixedRate(new MyTimer(), 0, 50); t.scheduleAtFixedRate(new MyTimer(), 0, 10); } /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here frame=new JavaApplication(); frame.setBounds(0, 0, 480, 400); frame.setVisible(true); } public void paint(Graphics g) { // super.paint(g); // 軌跡は残らないが、イメージが移動のたびに再描画され汚い // (0,0)-(480,200) : ok // (0,0)-(480,400) : NG // (0,0)-(240,200) : ok // (0,0)-(240,600) : NG // (0,0)-(480,600) : NG // ### windows10では、下記のsuper.repaintを入れなくても正常描画される // ### raspberry pi 3のrasbianでは、下記のsuper.repaintを入れないと描画がたまにしか行われない // super.repaint(); // 軌跡が残る+イメージがスキップする super.repaint(0, 0,480,200); // イメージは正常にスクロール // super.repaint(0, 0,480,400); // 軌跡が残る+イメージがスキップする // super.repaint(0, 0,240,200); // イメージは正常にスクロール // super.repaint(0, 0,240,600); // 軌跡が残る+イメージがスキップする // super.repaint(0, 0,480,600); // 軌跡が残る+イメージがだいぶスキップする g.drawImage(icon.getImage(), 0, Y1, this); g.drawImage(icon.getImage(), Y1,400,this); } public class MyTimer extends TimerTask{ public void run(){ if (Y1 < 200) Y1++; else Y1=0; if (Y2 < 200) Y2++; else Y2=0; if (frame != null) frame.repaint(0,0,480,400); // panel.repaint(); } } }
補足情報(FW/ツールのバージョンなど)
NetBeans IDE 8.2 + Rasbian strech
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー