Javaで常駐するタスクスケジューラを作る方法

このQ&Aのポイント
  • Javaを使って常駐するタスクスケジューラのプログラムを作成する方法について解説します。
  • バッチファイルを指定した時間ごとに起動する方法と、毎日定時に起動する方法を実現するためのコード例を紹介します。
  • また、多重起動チェックやメール受信起動など、役立つ機能も合わせて紹介します。
回答を見る
  • ベストアンサー

Javaで常駐するソフトを作っています

Javaを利用して常駐するタスクスケジューラのようなプログラムを作成しています。 大体は完成したのですが、どうしてもわからない部分があります。 「起動したらX分毎にバッチファイル起動!」 はできるのですが、 「起動したら60分毎にバッチファイル起動!」 ※ただしバッチファイル起動時間は 01:05、02:05、03:05 など指定間隔ごとにする プラス、 「起動したら毎日23:55にバッチファイル起動!」 が思いつきません。 ==================================== import java.awt.AWTException; import java.awt.Image; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.TrayIcon; import java.awt.TrayIcon.MessageType; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; import java.nio.channels.FileLock; import java.util.Timer; import java.util.TimerTask; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JOptionPane; public class Task { /** * メール振分タスク */ public static void main(String[] args) throws Exception { try { // 多重起動チェック @SuppressWarnings("resource") FileChannel fc = new FileOutputStream(new File("LockFile")).getChannel(); FileLock lock = fc.tryLock(); if (lock == null) { //既に起動されているので終了する JFrame frame = new JFrame(); JOptionPane.showMessageDialog(frame, "すでに起動されています!"); return; } //起動メッセージ表示 JFrame frame = new JFrame(); JOptionPane.showMessageDialog(frame, "タスクを起動しました!"); new Task(); } catch (Exception e) { } } /** コンストラクタ */ public Task() throws IOException, AWTException { // アイコンイメージの読み込み Image image = ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("16_16.png")); // トレイアイコン生成 final TrayIcon icon = new TrayIcon(image); // イベント登録 icon.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { icon.displayMessage("メール配信","メール配信システム アイコンがダブルクリックされました",MessageType.WARNING); } }); // ポップアップメニュー PopupMenu menu = new PopupMenu(); // 終了メニュー MenuItem exitItem = new MenuItem("終了"); exitItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); // メニューにメニューアイテムを追加 menu.add(exitItem); icon.setPopupMenu(menu); // タスクトレイに格納 SystemTray.getSystemTray().add(icon); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 01_メール受信起動.bat TimerTask task0 = new TimerTask() { @Override public void run() { icon.displayMessage("タイマー2分","メールチェックします\n" , MessageType.INFO); // メールチェック起動 String cmd = "cmd.exe /c start c:/dummy.bat"; try { Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); } } }; Timer timer = new Timer(); timer.scheduleAtFixedRate(task0, 0, 2 * 60 * 1000); // 2分ごと } }

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

Timerクラスを使う。

参考URL:
http://www.atmarkit.co.jp/fjava/javatips/078java008.html
nakisan2011_12
質問者

お礼

調べたら、最初の実行秒数が設定できることに気が付きました。 すいません、ありがとうございました。

関連するQ&A

  • javaのタイマープログラムの時間について

    下記のjavaのプログラムは、タイマー動作の確認プログラムです。 タイマーの起動時間を1msにし、1000回タイマーを起動しており トータルのタイマー時間は1秒と考えましたが、実際のタイマー時間は 20秒くらいかかります。 この件に関しまして、コメント頂けますと大変助かります。 import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; public class TimerTest1 extends JFrame implements ActionListener{ Timer timer; JLabel label; int sec; public static void main(String[] args){ TimerTest1 frame = new TimerTest1(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 300, 200); frame.setTitle("タイトル"); frame.setVisible(true); } TimerTest1(){ sec = 0; label = new JLabel(); JPanel labelPanel = new JPanel(); labelPanel.add(label); timer = new Timer(1, this); getContentPane().add(labelPanel, BorderLayout.CENTER); timer.start(); } public void actionPerformed(ActionEvent e){ label.setText(sec + " sec"); if (sec >= 1000){ timer.stop(); label.setText(" timer_stop"); }else{ sec++; } } } 以上、宜しくお願いします。

    • ベストアンサー
    • Java
  • javaでスタート画面を作っていて困っています。

    現在javaでゲームのスタート画面を作っているのですが、パネルが透過されずに困っています。 プログラムソースは import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Container; import java.awt.BorderLayout; import javax.swing.*; import java.awt.Font; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.*; import java.awt.event.*; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Container; import java.awt.BorderLayout; import javax.swing.border.LineBorder; import javax.swing.border.EtchedBorder; import java.awt.Color; import java.awt.Container; class Start最新版 extends JFrame{ public static void main(String args[]){ Start最新版 frame = new Start最新版("タイトル"); frame.setVisible(true); } Start最新版(String title){ setTitle(title); setBounds(10, 10, 1024, 768); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p = new JPanel(); p.setOpaque( false ); ImageIcon icon1 = new ImageIcon("Start.jpg"); JLabel label1 = new JLabel(icon1); JLabel label2 = new JLabel(); p.add(label1); Container contentPane = getContentPane(); contentPane.add(p, BorderLayout.CENTER); JButton button1 = new JButton("ゲームを始める"); button1.setFont(new Font("Mairyo", Font.PLAIN, 30)); JPanel n = new JPanel(); n.setOpaque(false); n.setLayout(new BoxLayout(n, BoxLayout.Y_AXIS)); n.add(Box.createRigidArea(new Dimension(290,30))); n.add(button1); となっています。「ゲームを始める」ボタンだけを残して、周りのパネルを透過して画像を表示させたいのですが、うまくいきません!解決方法をご存知の方どうか教えていただきたいです!よろしくお願いします。

  • Javaのプログラミング手伝ってください

    以下のソースコードを応用して、添付画像のような数字のかかれた画像を3つ並べてそれを回して7を揃えるというゲームを作りたいのですが全く進みません。どなたか完成させてくださいm(__)m使用する画像のファイル名は「slot1.jpeg」~「slot7.jpeg」です。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; public class OneSlot extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; final int MAX = 7; Timer timer = new Timer(150 , this); JLabel label= new JLabel("スタートで始まるよ",JLabel.CENTER); JButton[] bt = {new JButton("スタート"),new JButton("ストップ")}; JLabel slot= new JLabel(new ImageIcon("Slot1.jpg"),JLabel.CENTER); ImageIcon[] slot_icon = new ImageIcon[MAX]; int iCount = 0; OneSlot(String title) { super(title); timer.setActionCommand("timer"); setBounds(200, 200, 230, 150); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); for(int i = 0;i < slot_icon.length; i++) slot_icon[i] = new ImageIcon("Slot" + (i+1) + ".jpg"); add("North",label); add("Center",slot); JPanel p = new JPanel(); for (int i = 0; i < bt.length;i++) { bt[i].addActionListener(this); p.add(bt[i]); } add("South",p); setVisible(true); } public static void main(String[] args) { new OneSlot("スロットマシン"); } public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if(cmd.equals("timer")) { if(++iCount == slot_icon.length) iCount = 0; slot.setIcon(slot_icon[iCount]); } if(e.getSource() == bt[0] && !timer.isRunning()) { label.setText("7が当たりだよ"); timer.start(); } else if(e.getSource() == bt[1] && timer.isRunning()) { if(iCount+1 == MAX) label.setText("やった!!おめでとう"); else label.setText("残念でした"); timer.stop(); } } }

  • javaの画像の表示のプログラムとmouselistenerのプログラ

    javaの画像の表示のプログラムとmouselistenerのプログラム(それぞれ↓にあります)をひとつに合わせたいのですがどうすればいいでしょうか? import java.awt.event.*; import javax.swing.*; class MyPanel extends JPanel implements MouseListener{ public MyPanel() { addMouseListener(this); } public void mouseClicked(MouseEvent e) { int x=e.getX(); int y=e.getY(); System.out.println("マウスがクリックされました (" + e.getX() + ", " + e.getY() + ")"); if((x<100&&x>40)&&(y<100&&y>40)){ System.out.println("範囲内"); }else{ System.out.println("aaa"); } } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public void mousePressed(MouseEvent e) { } public void mouseReleased(MouseEvent e) { } } public class MouseEventExample extends JFrame { public static void main(String[] args) { new MouseEventExample(); } MouseEventExample() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); getContentPane().add(new MyPanel()); setSize(300, 200); setVisible(true); } } ======↑のプログラムと↓のプログラムを合わせたいのです package novel; import java.awt.*; import java.awt.geom.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.io.IOException; public class Java2dTest extends JFrame{ public static void main(String[] args){ Java2dTest test = new Java2dTest(); test.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);} }); test.setBounds( 0, 0, 200, 200); test.setVisible(true); } public void paint(Graphics g){ Graphics2D g2 = (Graphics2D)g; BufferedImage readImage = null; try { readImage = ImageIO.read(new File("sample.png")); } catch (Exception e) { e.printStackTrace(); readImage = null; } if (readImage != null){ g2.drawImage(readImage, 0, 0, this); } } }

  • staticではないメソッドadd(Comp・・・

    コンパイルエラーが出ました。 かたほうのソース”A”では、add(p)で通るんですが、もう一方のソース”At”は、通りませんなぜでしょうか? 教えて下さい ↓”A”(通るほう) import javax.swing.*; import java.awt.event.*; import javax.swing.JMenuBar; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.border.LineBorder; import java.awt.*; public class A extends JFrame implements ActionListener { public static void main(String args[]) { A a = new A(); a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); a.setBounds(200,200,400,200); JMenuBar menubar = new JMenuBar(); LineBorder border = new LineBorder(Color.black,2, true); menubar.setBorder(border); JMenu menu1 = new JMenu("ファイル"); JMenu menu2 = new JMenu("エディット"); JMenu menu3 = new JMenu("編集"); JMenu menu4 = new JMenu("ヘルプ"); menubar.add(menu1); menubar.add(menu2); menubar.add(menu3); menubar.add(menu4); JMenuItem menuitem1 = new JMenuItem("新しく作る"); JMenuItem menuitem2 = new JMenuItem("続きから作る"); JMenuItem menuitem3 = new JMenuItem("ヘルプの表示"); menu1.add(menuitem1); menu1.add(menuitem2); menu4.add(menuitem3); a.setJMenuBar(menubar); a.setVisible(true); } A() { super("A"); JLabel l = new JLabel(""); JButton b = new JButton("PUSH"); b.addActionListener(this); JPanel p = new JPanel(); p.setBackground(Color.green); p.add(b); p.add(l); add(p);       ←ここ } public void actionPerformed(ActionEvent e) { System.out.println("A"); } } ___________________________________________________________________________________________________________________________________________________ ↓”At” import javax.swing.*; import java.awt.*; import java.awt.event.*; public class At extends JFrame { public static void main(String args[]) { At at = new At(); at.setBounds(200,200,400,200); at.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); at.setVisible(true); JButton b1 = new JButton("JButton1"); JButton b2 = new JButton("JButton2"); JButton b3 = new JButton("JButton3"); JPanel p = new JPanel(); p.setBackground(Color.red); b1.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e) { JLabel l = new JLabel("JBUTTON!1"); } } ); p.add(b1); p.add(b2); p.add(b3); add(p);         ←ここ } }

    • ベストアンサー
    • Java
  • シンボルを解決できません

    サンプルプログラムをjavacでコンパイルすると 以下のようなエラーが出ます。 ----------------------------- C:\MyJava>javac menudemo.java menudemo.java:57: シンボルを解決できません。 シンボル: コンストラクタ Menu (java.lang.String) 場所 : Menu の クラス menu1 = new Menu("ファイル"); ^ menudemo.java:70: シンボルを解決できません。 シンボル: メソッド add (java.awt.MenuItem) 場所 : Menu の クラス menu1.add(menuitem1); ^ menudemo.java:71: シンボルを解決できません。 シンボル: メソッド add (java.awt.MenuItem) 場所 : Menu の クラス menu1.add(menuitem2); ^ menudemo.java:72: シンボルを解決できません。 シンボル: メソッド add (java.awt.MenuItem) 場所 : Menu の クラス menu1.add(menuitem3); ^ menudemo.java:75: java.awt.MenuBar の add(java.awt.Menu) は (Menu) に適用できません。 menubar1.add(menu1); ^ エラー 5 個 --------------------------------------------- サンプルプログラムは以下の通りです。 --------------------------------------------- import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class menudemo extends Applet implements ActionListener { Button button1, button2; MenuFrame menuWindow; public void init() { button1 = new Button("ウィンドウの表示"); add(button1); button1.addActionListener(this); button2 = new Button("ウィンドウの非表示"); add(button2); button2.addActionListener(this); menuWindow = new MenuFrame("デモメニュー"); menuWindow.setSize(100, 100); } public void actionPerformed(ActionEvent event) { if (event.getSource() == button1) { menuWindow.setVisible(true); } if (event.getSource() == button2) { menuWindow.setVisible(false); } } } class MenuFrame extends Frame implements ActionListener { MenuBar menubar1; Menu menu1; MenuItem menuitem1, menuitem2, menuitem3; TextField text1; MenuFrame(String title) { super(title); setLayout(new GridLayout(1, 1)); text1 = new TextField(""); add(text1); //メニューバーの生成 menubar1 = new MenuBar(); //メニューの生成 menu1 = new Menu("ファイル"); //メニュー項目の生成 menuitem1 = new MenuItem("Javaの"); menuitem2 = new MenuItem("世界へ"); menuitem3 = new MenuItem("ようこそ"); //イベントリスナーの登録 menuitem1.addActionListener(this); menuitem2.addActionListener(this); menuitem3.addActionListener(this); //メニューへの追加 menu1.add(menuitem1); menu1.add(menuitem2); menu1.add(menuitem3); //メニューバーへの追加 menubar1.add(menu1); //メニューバーを追加 setMenuBar(menubar1); } public void actionPerformed(ActionEvent event) { if (event.getSource() == menuitem1) { text1.setText("Javaの"); } if (event.getSource() == menuitem2) { text1.setText("世界へ"); } if (event.getSource() == menuitem3) { text1.setText("ようこそ"); } } } --------------------------------------------- テキストどおりに入力しているのですが、 いろいろ調べてみても どこがおかしいか自分では分かりませんでした。 どのようにすれば解決するかお教えください。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • JAVAでの背景画像表示

    現在javaでゲームのメニュー画面を作っているのですが、ボタンを配置する所まではできたんですが、背景に画像を表示することができなくて困っています! import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JLabel; import javax.swing.ImageIcon; import java.awt.Container; import java.awt.BorderLayout; import javax.swing.border.LineBorder; import javax.swing.border.EtchedBorder; import java.awt.Color; import java.awt.Container; public class Mati extends JFrame{ public static void main(String[] args){ Mati frame = new Mati(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10,650,650); frame.setTitle("街"); frame.setVisible(true); JPanel h = new JPanel(); h.setOpaque(false); ImageIcon icon1 = new ImageIcon("Mati.jpg"); JLabel label1 = new JLabel(icon1); JLabel label2 = new JLabel(); h.add(label1); } Mati(){ JButton button1 = new JButton("宿屋"); button1.setFont(new Font("Mairyo", Font.PLAIN, 30)); JButton button2 = new JButton("道具屋"); button2.setFont(new Font("Mairyo", Font.PLAIN, 30)); JButton button3 = new JButton("武器屋"); button3.setFont(new Font("Mairyo", Font.PLAIN, 30)); JButton button4 = new JButton("街を出る"); button4.setFont(new Font("Mairyo", Font.PLAIN, 30)); JPanel p = new JPanel(); p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS)); p.add(Box.createRigidArea(new Dimension(10,30))); p.add(button1); p.add(Box.createRigidArea(new Dimension(5,8))); p.add(button2); p.add(Box.createRigidArea(new Dimension(5,8))); p.add(button3); p.add(Box.createRigidArea(new Dimension(5,8))); p.add(button4); getContentPane().add(p, BorderLayout.CENTER); } } ソースはこのようになっています。これからどうすれば背景画像が表示されるか教えていただきたいです。 よろしくお願いします。

  • javaのCanvasを使用する描画

    今日は! repaintからCanvasの中のpaintルーチンを起動して描画を行なっています。 (下記のプログラム参照) ボタンを押すごとに、キャンバスに違った内容の書込みを行ないます。 painルーチンが起動する度に、既に書込んだキャンバスの内容がクリヤーされて 新規にキャンバスに書込みが行われて居ると思います。 Q1)キャンバスの内容をクリヤーすることなく、既に書込んだキャンバスの内容を 残して、その上に書込む方法はありませんか? (クリヤーのための指令は、出していないと思っています) ご教授の程、宜しくお願いします。 //================================ import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Line2D; import javax.swing.JFrame; import javax.swing.JPanel; public class ShapeTest1 extends JFrame{ int sw=0; myCanvasPanel myCanvas; public static void main(String[] args){ // JFrame frame = new JFrame(); ShapeTest1 frame=new ShapeTest1(); } ShapeTest1(){ JFrame frame=new JFrame(); // ShapeTest1 app = new ShapeTest1(); // frame.getContentPane().add(app); frame.setTitle("タイトル"); frame.setBounds(10, 10, 300,220); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // frame.setVisible(true); //North========================= JPanel p1=new JPanel(); myCtlPanel myCtl=new myCtlPanel(p1) ; // frame.getContentPane().add(p1,BorderLayout.SOUTH); frame.getContentPane().add(p1,BorderLayout.NORTH); //===================================== JPanel p2=new JPanel(); myCanvas=new myCanvasPanel(p2); p2.add(myCanvas); frame.getContentPane().add(p2,BorderLayout.CENTER); frame.setVisible(true); } //=========================== class myCtlPanel extends JFrame{ myCtlPanel(JPanel p){ /* //領域のサイズ設定 setSize(300,50); //領域のサイズ取得 Dimension dimension = getSize(); */ Button button1=new Button("button1"); button1.addActionListener(new TimButton1()); p.add(button1); } } class TimButton1 implements ActionListener{ @Override public void actionPerformed(ActionEvent ae){ if(sw==0){ sw=1; } else{ sw=0; } myCanvas.repaint(); //ng System.out.println("TimButton1 sw="+sw); } } class myCanvasPanel extends Canvas{ myCanvasPanel(JPanel p){ //領域のサイズ設定 setSize(300,150); //領域のサイズ取得 Dimension dimension = getSize(); // p.add(this); } // public void paintComponent(Graphics g){ //repaint()では、起動されない public void paint(Graphics g){ //repaint()では、起動 Graphics2D g2 = (Graphics2D)g; System.out.println("Paint sw="+sw); if(sw==0){ //================================================ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.draw(new Line2D.Double(30.0d, 50.0d, 180.0d, 140.0d)); //============================================== g2.setPaint(Color.PINK); BasicStroke wideStroke = new BasicStroke(4.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 70.0d)); } else{ g2.setPaint(Color.RED); BasicStroke wideStroke = new BasicStroke(4.0f); g2.setStroke(wideStroke); g2.draw(new Line2D.Double(30.0d, 120.0d, 250.0d, 140.0d)); } } } }

    • ベストアンサー
    • Java
  • javaのpanelが表示されません

    下記のプログラムを作ったんですが、eclipseで実行するとフレームは表示されますが、空のフレームのような状態で、panelやボタンなどは表示されません。mainとは別のクラスで作成してるからなんでしょうか?よろしくお願いします。 import java.awt.BorderLayout; import java.awt.Container; import java.awt.Dimension; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class Table0 { public static void main(String[] args) { new Frame0(); } } class Frame0{ JFrame frame; JPanel panel; JScrollPane jsp; JTable table; DefaultTableModel dtm; public Frame0(){ frame=new JFrame("table"); frame.setBounds(30, 30, 300, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); table=new JTable(8,5); jsp=new JScrollPane(table); jsp.setPreferredSize(new Dimension(250, 70)); panel=new JPanel(); panel.add(jsp); Container c=frame.getContentPane(); c.add(panel,BorderLayout.CENTER); } }

    • ベストアンサー
    • Java
  • マウスのイベント処理について

    「/home/tatuya/MyDocument/logo.jpg」の画像をドラック・移動できるようにしたいのですがうまくいきません。 なにがいけないのか教えてください。 できれば手直しして動くようになったプログラムをはってもらえるとさいわいです。 import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.imageio.ImageIO; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.Graphics; import java.awt.Image; import java.awt.geom.*; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; public class bb extends JFrame{ private int px; private int py; boolean flag=false; Image icon=getToolkit().getImage("/home/tatuya/MyDocument/logo.jpg"); public static void main(String[] args){ bb frame = new bb(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setBounds(10, 10, 400, 250); frame.setTitle("タイトル"); frame.setVisible(true); new bb(); } public void paint(Graphics g){ g.drawImage(icon,px,py,this); } public void mouseClicked(MouseEvent e){ /* 処理したい内容をここに記述する */ } public void mouseEntered(MouseEvent e){ /* 処理したい内容をここに記述する */ } public void mouseExited(MouseEvent e){ /* 処理したい内容をここに記述する */ } public void mousePressed(MouseEvent e){ /* 処理したい内容をここに記述する */ if (px<=e.getX() && e.getX()<=px+221 && py<=e.getY() && e.getY()<=py+59) flag=true; repaint(); } public void mouseReleased(MouseEvent e){ /* 処理したい内容をここに記述する */ flag=false; } public void mouseDragged(MouseEvent e){ if (flag){ px=e.getX();py=e.getY(); repaint(); } } public void mouseMoved(MouseEvent e){ } }