标签: runnable

帮助在Java中实现Runnable

我正在和我的团队一起开展一个java项目.总而言之,我们有一个主类,它有一个实例化并调用"Save"类的方法.这个"保存"类将文件保存回服务器,其中包含几个构造函数和一些可见和不可见的方法.该类占用大量CPU并且非常耗时,这会阻止主应用程序显示进度条对话框窗口,让用户知道保存的状态.他们要求我修改"保存"类,使其产生自己的线程,这样主应用程序的其余部分就可以完成向用户显示信息的较小任务.

以下是它的一般概念:

class MainApp{  
    ...

    private void doSave()
    {
        Save s = new Save();
        StatusWindow sw = new StatusWindow();

        if save_this
          s.saveThis(sw);
        if save_that
          s.saveThat(sw);

        ...
    }
    ...
}

class Save{
   ...

   public void saveThis(StatusWindow s)
   {
       //alot of code
       s.update;

   }
   public void saveThat(StatusWindow s)
   {
       //alot of code
       s.update;
   }
   ... // some non-visible methods, even more code
 }
Run Code Online (Sandbox Code Playgroud)

我现在是Java中线程的新手,但我对它们的工作原理有基本的了解.根据我的理解,实现Runnable的类,当它被实例化为新线程时,执行run()方法.问题是,由于针对不同类型的文件存在不同类型的保存方法,因此如何将这些方法实现到run()方法中?run()方法是在新线程中实例化类并且在其上调用.start()时执行的唯一方法吗?

什么是这个问题的好方法?是否需要重新设计"Sa​​ve"类以使其实现Runnable?

如果需要更多详细信息,请告知我们.感谢您的任何见解!

更新:感谢大家的帮助!这些解决方案将为未来派上用场.

java multithreading runnable

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

Android:MediaPlayer.setOnPreparedListener()

我有一个Service,它实现了MediaPlayer.OnPreparedListener.

到目前为止,我在一个函数中调用了player.setOnPreparedListener(this)并且运行良好.现在我想从Runnable调用setOnPreparedListener(使用Handler),但是我得到错误

MediaPlayer类型中的方法setOnPreparedListener(MediaPlayer.OnPreparedListener)不适用于参数(new Runnable(){})

因此,与其这样,我需要用的东西,将指向当前的类.问题是,什么?

android runnable android-mediaplayer

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

Runnable的实现是否允许在同一个实例上并发调用run()?

如果我有一个实现的类,java.lang.Runnable技术上没有什么能阻止多个线程run同一个实例上同时调用Runnable.例:

Runnable r = new MyRunnable();

//start thread 1
new Thread(r).start();

//start thread 2
new Thread(r).start();
Run Code Online (Sandbox Code Playgroud)

如果该run方法完全是"自包含的"(即不依赖于任何私有实例成员),这不是一个真正的问题,因为线程之间没有共享变量,因此您Runnable永远不会得到"损坏的"内部状态.但我认为,在大多数情况下,你Runnable 拥有它操纵在一些私人实例成员run,那么怎么办呢?

要使用示例,我的MyRunnable类有一个私有mode字段.主要目的是干净地停止run方法(通过设置modeSTOPPED),但它也有其他用途.

public static class MyRunnable implements Runnable
{
    enum Mode { RUNNING, PAUSED, STOPPED, FASTFORWARDING, REWINDING; }

    private volatile Mode mode;

    @Override
    public void run() 
    {
        mode = Mode.RUNNING;
        while (mode != Mode.STOPPED)
        { …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading software-design runnable

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

停止观看android - 暂停,然后从它停止的地方开始并开始

我有两个按钮"开始"和"暂停"和一个Textview.

我遇到的问题是当我按下暂停按钮然后按下开始按钮后,秒表不会从它停止的位置开始.

谢谢您的帮助

public class StopWatch extends Activity {
    /** Called when the activity is first created. */

    private TextView timeflg;
    private Button startButton;
    private Button pauseButton;
    private long mStartTime = 0L;
    private Handler mHandler = new Handler();
    long millis = 0L;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        if (mStartTime == 0L) {
            mStartTime = SystemClock.uptimeMillis();
            mHandler.removeCallbacks(mUpdateTimeTask);
            mHandler.postDelayed(mUpdateTimeTask, 0);


            }

            timeflg = (TextView) findViewById(R.id.timeflag);

            startButton = (Button) findViewById(R.id.start);
            startButton.setOnClickListener(new View.OnClickListener() {
                public void onClick(View view){

                    mHandler.postDelayed(mUpdateTimeTask, 0); …
Run Code Online (Sandbox Code Playgroud)

java android runnable android-activity

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

在没有线程的情况下实现Runnable的Java类

我有一个实现Runnable接口的模式.

现在我想根据布尔值在我的程序中启动该类多线程或非多重(顺序).

我该怎么做呢?这是我目前的代码:

Constructor<?> constructor = processorClass.getConstructor(constructorParameterTypes);
Processor<T> process = (Processor<T>)constructor.newInstance(constructorParameters);
RunnableProcessor<T> runnableProcessor = new RunnableProcessor<>(process, object);
if (multiThreaded) {
    new Thread(runnableProcessor).start();
}
else {
    //what to do here?
}
Run Code Online (Sandbox Code Playgroud)

所以澄清一下:我想调用run()方法runnableProcessor,而不是创建一个线程.但是我认为run()直接调用已被弃用,因此寻找更好的解决方案.

问候.

java multithreading runnable

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

JavaFX - 未调用runLater Runnable

我正在使用JavaFX进行项目.在启动过程中,我有一个提示,要求提供数据,我的网络类与这些数据建立了与服务器的连接.我的网络类异步工作,我在回调中得到响应.根据响应,我想从回调中打开一个新窗口(阶段).

执行我mainStage.setScene()按预期触发异常 - 不是从JavaFX应用程序线程调用,我必须使用Platform.runLater()但是:

Platform.runLater(new Runnable() {          
    @Override
    public void run() {
        System.out.println("run");
    }
});
Run Code Online (Sandbox Code Playgroud)

它从不打印"run".为什么?该accountDataPrompt.login()函数位于我的JavaFX启动函数的末尾,正如我所说,网络连接是异步运行的.提示符是自定义JavaFX对话框(JavaFX UI Sandbox).

java javafx runnable

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

生成一个可运行的jar并在其中包含Maven中的库

我正在尝试使用Maven和Eclipse编译Java项目,但我尝试了很多在Web上看到的解决方案,但它们似乎都没有用.我只想构建应用程序,创建一个可运行的jar并包含所需的库.我尝试过maven-dependency或maven-assembly但我肯定会错过一些东西,因为我每次都失败了.

这是我的pom.xml,它还可以,还是错过了什么?

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- Project Description -->
    <groupId>org.awax</groupId>
    <artifactId>toolbox</artifactId>
    <version>0.1.0</version>
    <name>ToolBox</name>
    <packaging>jar</packaging>
    <url>http://maven.apache.org</url>
    <description>Custom library containing useful code</description>

    <!-- Project Properties -->
    <properties>
        <jdk.version>1.7</jdk.version>
        <!-- Libraries Version -->
        <log4j.version>1.2.17</log4j.version>
        <jdom.version>2.0.5</jdom.version>
        <miglayout.version>3.7.4</miglayout.version>
        <jfreechart.version>1.0.19</jfreechart.version>
        <bounce.version>0.18</bounce.version>
        <!-- Maven Plugins Version -->
        <eclipse.version>2.9</eclipse.version>
        <compiler.version>3.2</compiler.version>
        <jar.version>2.5</jar.version>
        <assembly.version>2.4.1</assembly.version>
        <dependency.version>2.5.1</dependency.version>
    </properties>

    <!-- Project Libraries -->
    <dependencies>
        <!-- LOG4J -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!-- Jdom -->
        <dependency>
            <groupId>org.jdom</groupId>
            <artifactId>jdom2</artifactId>
            <version>${jdom.version}</version>
        </dependency>
        <!-- MigLayout -->
        <dependency>
            <groupId>com.miglayout</groupId>
            <artifactId>miglayout</artifactId>
            <version>${miglayout.version}</version>
        </dependency>
        <!-- JFreeChart …
Run Code Online (Sandbox Code Playgroud)

dependencies jar pom.xml maven runnable

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

将字符串链接到函数

Java(Android)中是否有一种方法可以链接字符串和函数?我的目标是根据从单独方法接收的字符串运行某个函数.

即如果myString =="building"则执行buildingmethod();

我正在考虑使用像这样的HashMap:

HashMap<String,Runnable> hashDBTableUpdateRef = new HashMap<>();
hashDBTableUpdateRef.put("house",this.housemethod());
hashDBTableUpdateRef.put("shed",this.shedmethod());
hashDBTableUpdateRef.put("barn",this.barnmethod());
Run Code Online (Sandbox Code Playgroud)

然后

String myString = getCalculatedString();
for (String s : hashDBTableUpdateRef) {
    hashDBTableUpdateRed.get(s).run();
}
Run Code Online (Sandbox Code Playgroud)

我无法真正使用参数创建泛型方法,例如function anyBuilding(String buildingType)由于以下操作和自定义枚举.有什么想法吗?是runnable前进的道路?

例如:

function housemethod() {
    myHouseObject.runSomething();
}
function shedmethod() {
    myShedObject.runSomething();
}
function barnmethod() {
    myBarnObject.runSomething();
}
Run Code Online (Sandbox Code Playgroud)

谢谢,

java android enumeration hashmap runnable

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

Java:从Runnable返回结果

假设以下简化示例.设B表示处理某些栅格数据的类:

import java.awt.image.BufferedImage;

public class B implements Runnable{
    private boolean c;
    private Runnable f;

    public B (boolean c_, Runnable f_) { c = c_; f = f_;}

    public BufferedImage process() {
            //Some operations
            BufferedImage output = null;
            if (c) output = new BufferedImage(100, 100, BufferedImage.TYPE_INT_ARGB);
            return output;
    }

    public void run() { process();}
}
Run Code Online (Sandbox Code Playgroud)

处理()方法可以但可能不产生输出评价者.由于计算成本,该过程在单独的线程中运行.

设A表示将在其中运行过程的类.它还包含一些等待线程完成后的后处理步骤:

import java.awt.image.BufferedImage;

public class A {
    public A(){}
    public void compute() {
            boolean c = true;
            B b = new B( c, …
Run Code Online (Sandbox Code Playgroud)

java multithreading return runnable

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

如果我们不使用join(),为什么多线程C++程序崩溃,而类似的Java程序则不然

假设我们有以下C++程序

void hello (){
   std :: cout << "HELLO"<<std::endl ;
}

int main(){

    std:: thread t(hello) ;
    t.join() ;

}
Run Code Online (Sandbox Code Playgroud)

如果我们不调用此代码中的join,我们的程序将崩溃,因为主线程将在线程t1完成之前终止.但是如果我们在Java中有相同的程序,即使main不等待线程,程序也能正常执行.

public class HelloWorld {
    public static void main(String[] args) {
        Thread t = new Thread(new Hello());
        t.start();

    }

}

class Hello implements Runnable {

    public void run() {

          System.out.println("Hello") ;

}
}
Run Code Online (Sandbox Code Playgroud)

那么为什么在Java中程序不会崩溃?即使主要完成,线程如何执行?

c++ java multithreading runnable

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