ページ 11

[java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月12日(日) 22:24
by java大好き
javaで呼び出してないのに実行されているメソッドがあります。何か原因は分かりますか?
何故呼び出されてるか分かるかというとSystem.out.println("test");でこれが実行されているからです…
何故でしょう?Eclipseでメソッドを検索しても、そのクラスの中のメソッド以外、他から呼び出した形跡がありません…

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月12日(日) 22:39
by Math
一寸情報不足でしょうね。もっと詳しく状況を説明してください。(コードも提示して頂くと分かりやすいでしよう。)

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月12日(日) 22:45
by java大好き
コードはちょっと書けないのですが、EclipseでSystem.out.printlnで出力されるのって必ずしも実行順ではないのですか?

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月12日(日) 22:49
by java大好き
かけないのが本当に残念で悔しいのですが、何かEclipseの仕様とかあるんですか?
実行されていても出力はしないとか、一気にまとめて出力するとかそんな仕様があれば教えてください…
printlnは強力な手段だとは思いますが…

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月12日(日) 22:55
by java大好き
すいません
overrideのほうにかいてましたが失礼いたしました。
こちらですね。

その関数がどのオブジェクトから呼び出されたかとか、確認する方法はありますか?mainから呼び出しているんですが、もしかしたらjavaではそのクラスにアクセスしたら呼び出さなくても勝手に実行されるメソッドみたいな仕様があるかもしれません…

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月12日(日) 23:28
by Math
”イベントドリブン”なプログラムなので(おそらく何百、何千というイベントが絡み合う)出力する順番はよくテストしないと”条件”によってかわります。フォームを出すだけで幾つものイベントが発生します。

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月12日(日) 23:40
by hide
Eclipseならブレークポイントを張ってコールスタックを確認するのが一番手っ取り早そうです。

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月12日(日) 23:42
by Math
デバッガーで調べたりログを出して調べますよ。

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月13日(月) 03:14
by かずま
次のプログラムに runメソッドを呼び出すところはありませんが、
実行すると run は呼び出されています。そういうことでしょうか?
Eclipse ではなく Java の仕様です。

コード:

class SubThread extends Thread {
    public void run() {
        System.out.println("run invoked");
    }
}

class Test {
    public static void main(String args[]) {
        SubThread sub = new SubThread();
        sub.start();
    }
}

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月13日(月) 19:55
by java大好き
すいません原因が分かりました。

setContents(Transferable contents, ClipboardOwner owner)
これが原因でした。

setContentsはTransfearableを実装したクラスのメソッドを実行してるってことでいいですよね?
このクラスは実際にオーバーライドして自分が作っています。
setContentsの中身が見えないのでTransfearable実装クラスのメソッドがどこで実行されてるのか分からない状態でした…

自分の認識はあってるでしょうか?出来ればsetContentsの中を見たいのですが…

Re: [java]呼び出したつもりがないメソッドが実行されている

Posted: 2017年3月14日(火) 08:00
by Math
setContentsはクラスClipboardのメンバーです。

詳細はここhttps://docs.oracle.com/javase/jp/8/doc ... board.htmlにありますよ。