質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

2314閲覧

クラス内の関数に引数が設定できるが、エラーが出てしまう。

P5_USER

総合スコア73

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/12/02 05:05

いつもお世話になっています。

前提・実現したいこと

遅滞なく各表示をコントロールするために、
同じ機能を有する複数のサブスレッドを立ててこれを達成しようとしています。

そしてこのために、作成したクラスの中の関数に
引数を設定しました。↓
public void run(int now, int before, int gValue)
すると、以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

The method run(int, int, int) of type ○○○.SubThread must override or implement a supertype method The type ○○○.SubThread must implement the inherited abstract method Runnable.run()

ネットで検索すると、@Overrideを削除すると解決するとありましたが、
2つのエラーメッセージが消えた訳ではなく、

The type ○○○.SubThread must implement the inherited abstract method Runnable.run()

が残ったままでした。

run()に引数を持たせたまま、エラーを回避する方法はないでしょうか。

該当のソースコード

processing

1class SubThread implements Runnable { 2 // 実行許可FLG 3 private boolean running = true; 4 5 private boolean toggle = true; 6 7 // ここが実行される 8 @Override 9 public void run(int now, int before, int gValue) { 10 11 while (running) { 12 switch(now) { 13 case 0: 14 case0(before, gValue); 15 break; 16 17 case 1: 18 case1(before, gValue); 19 break; 20 21 case 2: 22 case2(before, gValue); 23 break; 24 } 25 26 // 値を更新 27 before = now; 28 29 switch (now) { 30 case 0: 31 trySleep(0.01); 32 break; 33 34 case 1: 35 trySleep(0.5); 36 break; 37 38 case 2: 39 trySleep(0.01); 40 break; 41 } 42 } 43 println("Sub Thread exit"); 44 } 45 46 void case0(int Before, int G) { 47 48 if (Before == 0) { 49 50 if (G + 4 < 255) { 51 52 G = G + 4; 53 println(G); 54 } else { 55 56 G = 255; 57 } 58 } else if (Before == 1) { 59 G = 255; 60 } else if (Before == 2) { 61 G = 0; 62 } 63 println("state|0"); 64 } 65 66 void case1(int Before, int G) { 67 68 if (toggle) { 69 G = 0; 70 } else { 71 G = 255; 72 } 73 // フラグ反転 74 toggle = !toggle; 75 println(Before); 76 println("state|1"); 77 } 78 79 void case2(int Before, int G) { 80 81 if (Before == 2) { 82 83 if (G - 4 > 0) { 84 G = G - 4; 85 println(G); 86 } else { 87 G = 0; 88 } 89 } else if (Before == 1) { 90 G = 255; 91 } 92 println("state|2"); 93 } 94 95 void trySleep(float time) { 96 try { 97 Thread.sleep((long)(time * 1000)); 98 } 99 catch (InterruptedException ex) { 100 ex.printStackTrace(); 101 } 102 } 103}

試したこと

コードは見様見真似で下記のコードを参考にしました。

http://mslabo.sakura.ne.jp/WordPress/make/processing 逆引きリファレンス/マルチスレッドを実現するには/

補足情報(FW/ツールのバージョンなど)

processing 3.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

P5_USER

2019/12/02 06:35

ご提示いただいた、URLの handler.post(obj);についてですが、 proseccingでは、どのようにhandlerを導入したらよいのでしょうか。
MAKOTO_MOBY

2019/12/02 07:46

すみません。 こちらの方が分かりやすいかもです。 https://codeday.me/jp/qa/20190410/599007.html run()は引数を取れないので、SubThreadオブジェクトに渡したい引数を受け取るインスタンス変数を 用意してあげます。 SubThreadのインスタンス変数をセット -> run()実行 インスタンス変数の値を使って処理 のような流れです。
guest

回答1

0

ベストアンサー

@Overrideを宣言した以上、そのメソッドは親クラスや実装したインタフェースのメソッドをオーバーライドしなければいけません。
実装しているRunnableインタフェースは、引数なしのrun()メソッドを持ちますが、引数のあるrun(int, int, int)は持ちません。
つまり、オーバーライドの条件を満たしていないため、コンパイルエラーとなります。

@Overrideをなくすと、上記理由がなくなるのでそのコンパイルエラーは消えますが、Runnableインタフェースを実装した以上、引数なしのrun()メソッドを実装する義務があります。こっちの義務を果たしていないため、やはりコンパイルエラーになります。

結局、引数ありのrun(int, int, int)メソッドから起動するということは不可能です。引数なしのrun()から、別メソッドを呼ぶなどの形しかないです。

投稿2019/12/02 06:46

編集2019/12/02 06:51
swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

P5_USER

2019/12/02 07:10

swordoneさん回答ありがとうございます。 先に、情報追加・修正依頼にてMAKOTO_MOBYさんの提示していただいた、 https://codeday.me/jp/qa/20190101/117039.html での解決方法ですが、これでは(原理上)動作不可なのでしょうか。 試しに、コードを追加しているのですが、 handler.post(obj); がどうしてもprocessingのエディタにて認識されませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問