Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Observer模式对线程进行文件监视?_Java_Observer Pattern_Java Threads_File Monitoring - Fatal编程技术网

Java 如何使用Observer模式对线程进行文件监视?

Java 如何使用Observer模式对线程进行文件监视?,java,observer-pattern,java-threads,file-monitoring,Java,Observer Pattern,Java Threads,File Monitoring,我正在尝试将观察者模式应用到我制作的游戏中。当在战区文件中使用线程创建恶棍时,我想使用observer模式使用线程创建英雄,并将其添加到同一文件中。维利亚人和英雄是使用工厂方法模式创建的。关于将我的HeroCreationMain类链接到observer模式类,我不确定该去哪里 维利创作 public class VillianCreationMain { private static Villian villian; public static void main(String[] arg

我正在尝试将观察者模式应用到我制作的游戏中。当在战区文件中使用线程创建恶棍时,我想使用observer模式使用线程创建英雄,并将其添加到同一文件中。维利亚人和英雄是使用工厂方法模式创建的。关于将我的HeroCreationMain类链接到observer模式类,我不确定该去哪里

维利创作

public class VillianCreationMain {

private static Villian villian;

public static void main(String[] args, int userInput) throws IOException {

    String fileName = null;

    Random randomVillian = new Random();

    int amountOfVillians = userInput;

    if (amountOfVillians < 7) {

        for (int x = 0; x < amountOfVillians; x++) {

            int randomGenerator = randomVillian.nextInt(6);

                for (int i = 0; i < 5; i++) {

                    if (randomGenerator == 0 ) {

                        setVillian(new FlyingVillian());

                    }

                    else if (randomGenerator == 1) {

                        setVillian(new StrongVillian());

                    }

                    else if (randomGenerator == 2) {

                        setVillian(new FastVillian());

                    }

                    else if (randomGenerator == 3) {

                        setVillian(new SmartVillian());

                    }

                    else if (randomGenerator == 4) {

                        setVillian(new FireVillian());

                    }

                    else if (randomGenerator == 5) {

                        setVillian(new IceVillian());

                    }

                        try {

                            writeToFile(getVillian(), i, fileName);
                        }
                        catch (IOException e) {

                            System.out.println(e.getMessage());
                        }

                    }

                VillianThreads t1 = new VillianThreads(VillianCreationMain.getVillian());

                t1.start();

                }

            }

    else {

            System.out.println("Please enter a value of less than 7");
    }
}

public static void writeToFile(Villian villian, int amountOfVillians, String fileName) throws IOException {

    for(int x = 0; x < amountOfVillians; x++) {

    //  String parsedInt = Integer.toString(x);

        fileName = "battle-zone.ser";

        FileOutputStream file = new FileOutputStream(fileName);
        ObjectOutputStream oos = new ObjectOutputStream(file);

        oos.writeObject(villian);

        file.close();
        oos.close();
    }
}

public static Villian getVillian() {
    return villian;
}

public static void setVillian(Villian villian) {
    VillianCreationMain.villian = villian;
}

}
观察者

public interface Observer {

public void update(boolean enemyPresent);

}

public interface Subject {

public void register(Observer o);
public void unregister(Observer o);
public void notifyObserver();

}
可观察

public class VillianObserver implements Observer {

private boolean enemyPresent;
private static int heroIDTracker;
private int heroID;
private Subject villianObserver;

public VillianObserver(Subject villianObserver) {

    this.villianObserver = villianObserver;
    this.heroID = ++heroIDTracker;
    System.out.println("New Observer " + this.heroID);
    villianObserver.register(this);
}

@Override
public void update(boolean enemyPresent) {

    this.enemyPresent = enemyPresent;
    printResult();
}

public void printResult() {

    System.out.println(heroID + " " + enemyPresent);
}

}
敌国地位

import java.util.ArrayList;

public class EnemyStatus implements Subject {

private ArrayList<Observer> observers;
private boolean enemyPresent;

public EnemyStatus() {

    // Creates an ArrayList to hold all observers

    observers = new ArrayList<Observer>();

}

@Override
public void register(Observer newObserver) {

    observers.add(newObserver);

}

@Override
public void unregister(Observer deleteObserver) {

    // Get the index of the observer to delete

    int heroIndex = observers.indexOf(deleteObserver);

    // Print out message (Have to increment index to match  

    System.out.println("Observer " + (heroIndex+1) + " deleted");        

    // Removes observer from the ArrayList

    observers.remove(heroIndex);


}

@Override
public void notifyObserver() {

    for(Observer observer : observers) {

        observer.update(enemyPresent);
    }

}

public void setEnemyStatus(boolean enemyPresent) {

    this.enemyPresent = enemyPresent;
    notifyObserver();

}

}  
import java.util.ArrayList;
公共类EnemyStatus实现主题{
私人ArrayList观察员;
私家布尔enemyPresent;
公敌{
//创建用于容纳所有观察者的ArrayList
Observators=新的ArrayList();
}
@凌驾
公共无效登记册(观察员){
新增观察员(新观察员);
}
@凌驾
公共无效注销(观察员删除观察员){
//获取要删除的观察者的索引
int-endex=observer.indexOf(deleteObserver);
//打印出消息(必须增加索引以匹配
System.out.println(“观察者”+(英雄索引+1)+“删除”);
//从ArrayList中删除观察者
观察者:移除(海洛因);
}
@凌驾
公众观察者(){
观察员(观察员:观察员){
观察员:最新情况(enemyPresent);
}
}
public void setEnemyStatus(布尔值enemyPresent){
this.enemyPresent=enemyPresent;
notifyObserver();
}
}  

JNotify是用于观察文件系统上文件更改的Java库

一条建议:刚开始时,对象(输入/输出)流很容易,但它们会把你引向毁灭之路。对象很容易被破坏。使用文本编辑器检查对象文件也相对困难。我建议你尝试使用不同的数据格式(如JSON)

import java.util.ArrayList;

public class EnemyStatus implements Subject {

private ArrayList<Observer> observers;
private boolean enemyPresent;

public EnemyStatus() {

    // Creates an ArrayList to hold all observers

    observers = new ArrayList<Observer>();

}

@Override
public void register(Observer newObserver) {

    observers.add(newObserver);

}

@Override
public void unregister(Observer deleteObserver) {

    // Get the index of the observer to delete

    int heroIndex = observers.indexOf(deleteObserver);

    // Print out message (Have to increment index to match  

    System.out.println("Observer " + (heroIndex+1) + " deleted");        

    // Removes observer from the ArrayList

    observers.remove(heroIndex);


}

@Override
public void notifyObserver() {

    for(Observer observer : observers) {

        observer.update(enemyPresent);
    }

}

public void setEnemyStatus(boolean enemyPresent) {

    this.enemyPresent = enemyPresent;
    notifyObserver();

}

}