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

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

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

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

Q&A

解決済

1回答

768閲覧

Minecraft Spigotで指定した時間に実行したい

IbisK

総合スコア13

Java

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

0グッド

0クリップ

投稿2018/11/10 15:21

前提・実現したいこと

Spigot 1.12 java 8

毎日指定した時間に、指定したメッセージを送信するプラグインを作っています。

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

毎日実行をしたいので日付指定を削除すると実行できない。

該当のソースコード

java

1package *********; 2 3import java.text.ParseException; 4import java.text.SimpleDateFormat; 5import java.util.Timer; 6import java.util.TimerTask; 7 8import org.bukkit.Bukkit; 9import org.bukkit.plugin.java.JavaPlugin; 10 11public class Main extends JavaPlugin{ 12 public void onEnable() { 13 System.out.println("プラグインが有効になりました"); 14 15 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 16 Timer timer1 = new Timer(false); 17 TimerTask task1 = new TimerTask() { 18 @Override 19 public void run() { 20 Bukkit.broadcastMessage("テスト"); 21 22 timer1.cancel(); 23 } 24 }; 25 try { 26 timer1.schedule(task1, sdf.parse("2018/11/11 00:00:00")); 27 } catch (ParseException e) { 28 // TODO 自動生成された catch ブロック 29 e.printStackTrace(); 30 } 31 } 32 33} 34

試したこと

yyyy/MM/ddと2018/11/11を削除

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

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

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

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

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

guest

回答1

0

ベストアンサー

timer1.schedule(task1, sdf.parseのところのStringを、
変数で指定します。

example

1int year = 2018; 2( year + "11/11 00:00:00" );

この変数は、サーバー終了時にでもファイルで保存しておきます( ずっと起動させるサーバーならいらない?)

example2

1import java.io.*; 2 3public void save() 4{ 5 File f = new File( "ファイルのパス" ); 6 PrintWriter pw = new PrintWriter( new BufferedWriter( new FileWriter( f ) ) ); 7 8 pw.println( year ); // 年を保存 9}

プログラムのはじめに変数に代入します。

import java.io.*; public void load() { File f = new File( "ファイルのパス" ); /* ファイルを読み込む(長くなるので割愛 ) */

また、whileで日にちが変わっていた場合は日にちの変数を変更します。

example3

1while( true ){ 2int day; 3 4/* 日にちが変わっていたら */ 5if( day != /* カレンダークラスを使い?日付を取得 */ ) { 6 day = /* 取得した現在の日付 */ 7}

ざっくりですが、こんな感じでどうでしょう。日付関係のクラスは余り使わないので不安ですが、エラー等起きたらすいません。
長文失礼しました。

投稿2018/11/11 13:32

yukkuri

総合スコア624

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問