小编Dus*_* E.的帖子

多线程无法正常工作

编辑 这篇文章涉及我在学校的家庭作业,指示我依靠swing来显示我的线程和布尔标志来阻止.

我的应用程序创建了一堆"作业"对象,每个对象都包含一个线程.每个工作都属于一个生物.一个生物可以拥有多个作业,但在任何特定时刻只能执行其中一个作业.

我的线程使用2个布尔标志来判断它是否应该运行名为"killFlag"和"goFlag".它将它所属的生物指定为"目标".每个目标都有一个布尔值"isWorking"来表示它是否忙于另一个工作.

这是每个作业应该运行的线程:

public void run() {
    long time = System.currentTimeMillis();
    long startTime = time;
    long stopTime = time + 1000 *  (long)( jobTime );
    double duration = stopTime - time;



    synchronized (this.target) {
        while (this.target.isWorking) {
            status = 'w';
            showStatus(); // hmmmmmmmm
            try {
                this.target.wait();
            } catch (InterruptedException e) {
            }
        }

        this.target.isWorking = true;
    }

    while (time < stopTime && !killFlag) {
        try {
            TimeUnit.MILLISECONDS.sleep(100);
        } catch (InterruptedException e) {
        }

        if (goFlag) {
            status = …
Run Code Online (Sandbox Code Playgroud)

java swing multithreading

8
推荐指数
1
解决办法
297
查看次数

搜索多树数据结构的最有效方法

我想知道是否有一种更有效的方式来搜索多树而不是我一直在做的事情.我最近为项目构建了一个多树数据结构,如下所示. 使用ArrayLists的多树数据结构

洞穴将各方列入阵列列表.不同的政党会拥有不同的生物.不同的生物会持有不同的物品.

我需要一种方法来搜索整个树,以便将对象与其拥有的属性(如索引)相匹配.这是我的程序片段,它搜索每个ArrayList以查看派对,生物,宝藏或工件是否与int I调用索引匹配.

编辑(解释我的代码)类Party,Creature,Treasure和Artifact都具有索引,名称,类型等属性.多树将Cave设置为根音符.Cave有一个ArrayList,可以包含许多Party对象.每个Party都有一个ArrayList,可以包含许多Creature对象.每个生物都有两个数组列表,一个用于保存Artifact对象,另一个用于Treasure对象.

下面我正在搜索哪个派对,生物,工件或宝藏包含我正在搜索的特定索引.我通过迭代派对来实现这一点,我在每个派对中查看这些生物,并且每个生物都会查看文物和宝物.这就是为什么我在for循环中有这么多for循环:(.

case 0 :
            int index =                 Integer.parseInt( stat );
            for ( Party p : SorcerersCave.theCave.parties ) {
                if ( index == p.getIndex()) {
                    generateInterface.theGame.printOutput( "\t" + p );
                    break;
                } else {
                    for ( Creature c : p.members ){
                        if ( index == c.getIndex() ){
                            generateInterface.theGame.printOutput( "\t" + c );
                            break;
                        } else {
                            for ( Treasure t : c.inventory ){
                                if ( index == t.getIndex() ){
                                    generateInterface.theGame.printOutput( "\t" + t );
                                    break; …
Run Code Online (Sandbox Code Playgroud)

java optimization search arraylist

5
推荐指数
1
解决办法
1855
查看次数

线程没有通信

我正在制作一个程序,其中x个线程池与共享库存交互.在这种情况下,我使用ArrayList作为共享库存.在我的程序中,线程是生物具有的作业的表示.生物属于一方并共享用于执行工作的工件池.只有一个生物我随时与游泳池互动.

出于某种原因,我一直遇到线程通信问题.我已经设置了它,所以如果没有使用游泳池,该生物会将所有物品放入游泳池并开始查看它.如果他们找不到他们需要的所有东西,他们应该将他们拥有的所有工件放入池中,将池设置为不忙,然后发出一个等待池的生物发出信号,表示它已经准备好让它们通过它.

我的问题是,如果一个生物正在通过水池观察而另一个正在等待,并且它无法找到它想要的东西,它会重复该过程而不会通知或让其他生物通过它.

我尝试过的:我最初尝试使用锁,但锁不会发出其他线程的信号.然后我利用synchronized(Party)重写了它.然后我认为这是因为线程在某个地方崩溃,但线程可以一直运行,甚至在作业完成时将其项目转储回池中(假设生物没有将池锁定到空中).

boolean ready = target.hasReqArtifacts( reqStones, reqPotions, reqWands, reqWeapons );
    //checks to see if creature already has correct amount of each item.
    //If it does it should skip pool interaction until it dumps its used items
    //back into the pool.
    System.out.println( "Ready: " + ready );
    while ( !ready ) {//begin pool interaction
        synchronized ( target.poolParty ){
            System.out.println( "Ready: " + ready );
            System.out.println( this );
            while ( target.poolParty.busyPool ) {//busyPool is …
Run Code Online (Sandbox Code Playgroud)

java concurrency sync

5
推荐指数
1
解决办法
99
查看次数

显式设置函数的返回类型

我最近在讨论JS代码,我找到了以下注释:

/**
* Explicitly set the return type here to prevent the primitive being lost when using new
* @return {boolean}
*/
function giveMeABoolean(please) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?JS中的返回类型?我一直在网上闲逛,找不到任何相关信息.经过一些测试后,在没有注释的情况下使用new时,原语确实会丢失 .谁能解释这个注释是如何工作的?

javascript

3
推荐指数
2
解决办法
2477
查看次数

为什么不推荐使用 mouse_event?

我目前正在遵循一个简单的自动点击应用程序的指南。我正在使用的指南利用mouse_event.

我所看到的任何地方都说它mouse_event已被弃用,并且最好使用SendInput,但我还没有找到您应该使用一个而不是另一个的实际原因。

甚至关于mouse_event的文档也指出“改用 SendInput”。

我的大部分经验都在 Java 中,我非常熟悉 thread.stop() 被弃用,因为它很危险。我正在寻找相同类型的解释。

c# windows mouseevent

2
推荐指数
1
解决办法
1746
查看次数

false时布尔赋值为204

我有一个叫做Symbol代表变量的对象.符号具有布尔属性usedinitialized as false.如果要求它解决一个函数以显示它已被使用,则此条件将更改为true.出于某种原因,当Symbol未使用且used永远不会更改为true时,它返回值204而不是false.

这是SymbolTable.h,我定义了一个符号:

class SymbolTable  {
public:
    SymbolTable() {}
    void insert(string variable, double value);
    double lookUp(string variable) ;
    bool unusedVar() ;
private:
    struct Symbol  {
    Symbol(string variable, double value)
    {
        this->variable = variable;
        this->value = value;
        bool used = false;//This is my boolean flag
    }
    string variable;
    double value;
    bool used;
};
...
Run Code Online (Sandbox Code Playgroud)

每当我从SymbolTable中查找一个值插入一个等式时,我就设置used为true:

double SymbolTable::lookUp(string variable)  {
    for (int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
4013
查看次数

使用IntelliJ IDEA GUI Designer在$$$ setupUI $$$上的NullPointer异常

我一直在尝试在我正在使用的applet中使用我在IntelliJ IDEAS GUI Designer中创建的GUI.当我在我的根JPanel中只有一个标签但是由于某种原因当我添加更多组件时,我得到了运行的东西我得到以下错误:

java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1095)
at java.awt.Container.add(Container.java:971)
at inputGui.$$$setupUI$$$(inputGui.java)
at inputGui.<init>(inputGui.java:25)
at HelloWorld.init(HelloWorld.java:11)
at sun.applet.AppletPanel.run(AppletPanel.java:435)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

我的GUI类inputGui.java是这样的:

(我将标记它打破的行://!BROKEN - 第25行!)

public class inputGui extends JFrame {
private JPanel rootNode;
private JTextField id_field;
private JTextField mi_field;
private JTextField lastName_field;
private JTextField address_field;
//more declorations...

public inputGui() {//initialize GUI
        super( "Hello World" );
        setContentPane( rootNode );//!BROKEN - Line 25!
        pack();
        setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        setVisible( false );
    }
    public JPanel getRootNode() {
        return rootNode;
    }
    private …
Run Code Online (Sandbox Code Playgroud)

java user-interface applet intellij-idea

2
推荐指数
1
解决办法
4771
查看次数