相关疑难解决方法(0)

System.out.println的多线程输出是否是交错的

如果多个线程在没有同步的情况下调用System.out.println(String),输出是否可以交错?或者每行写入原子?该API只字不提同步的,所以这似乎是可能的,或者是由缓冲和/或虚拟机存储器模型等防止交织输出?

编辑:

例如,如果每个线程包含:

System.out.println("ABC");
Run Code Online (Sandbox Code Playgroud)

输出保证是:

ABC
ABC
Run Code Online (Sandbox Code Playgroud)

或者它可能是:

AABC
BC
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronization printstream

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

JavaFX:非GUI线程中的Canvas到Image

我必须可视化大量数据(实时),我正在使用JavaFX 2.2.所以我决定在将数据插入GUI线程之前"预先可视化"数据.

在我看来,最快的方法(使用antialliasing等)是让一些NON GUI线程生成图像/位图然后放入GUI线程(因此UI仍然对用户响应).

但我找不到如何将Canvas转换为Image然后使用:

Image imageToDraw = convert_tmpCanvasToImage(tmpCanvas);

Platform.runLater(new Runnable() {

            @Override
            public void run() {
                canvas.getGraphicsContext2D().drawImage(imageToDraw, data.offsetX, data.offsetY);
            }
        }); 
Run Code Online (Sandbox Code Playgroud)

这是一些有用的答案.:-)

顺便说一句:我已经制作了测试应用程序以显示我的问题.

package canvasandthreads02;

import java.util.Random;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;

public class CanvasAndThreads02 extends Application {

@Override
public void start(Stage primaryStage) {
    Button btn = new Button();
    btn.setText("Paint");


    final AnchorPane root = new AnchorPane();
    final Canvas canvas = …
Run Code Online (Sandbox Code Playgroud)

javafx canvas image

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

JavaFx Gui与Swing的表现

我写了两个简单的程序,都绘制了相同的Sierpinski三角形: 在此输入图像描述
一个程序使用swing实现,一个使用javafx.存在非常显着的性能差异,swing实现持续快得多:

在此输入图像描述


(在这个测试案例中:超过1秒摆动Javafx超过12秒)
是否可以预料到或者我的javafx实现有什么问题?

Swing实现

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class SimpleSrpnskTriSw {

    private Triangles triPanel;

    SimpleSrpnskTriSw(int numberOfLevels){

        JFrame frame = new JFrame("Sierpinski Triangles (swing)");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        triPanel = new Triangles();
        frame.add(triPanel, BorderLayout.CENTER);
        frame.pack();

        frame.setResizable(false);
        frame.setVisible(true);

        triPanel.draw(numberOfLevels);
    }

    class Triangles extends JPanel{

        private static final int PANEL_WIDTH =600, PANEL_HEIGHT = 600;
        private static final int TRI_WIDTH= 500, TRI_HEIGHT= 500;
        private static …
Run Code Online (Sandbox Code Playgroud)

java performance swing javafx

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

为什么我在 JavaFX 上看到“Not on FX application thread”?

我正在学习 JavaFX 并且我制作了一个演示应用程序,该应用程序具有 Label 检测值更改并更改其显示。我试图将 Label.textProperty 绑定到该值,但仍然不起作用。这是我的代码:

public class MainApp extends Application {

public static void main(String[] args) {
    launch(args);
}

private Temp aTemp = new Temp();

@Override
public void start(Stage primaryStage) {

    try {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("Sample.fxml"));      
        BorderPane root = (BorderPane)loader.load();
        SampleController sampleController = loader.getController();

        Scene scene = new Scene(root,600,600);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

        primaryStage.setScene(scene);
        primaryStage.show();

        sampleController.setModel(aTemp);

    } catch(Exception e) {
        e.printStackTrace();
    }
}}
Run Code Online (Sandbox Code Playgroud)

这是模型

public class Temp {
private StringProperty temp = new SimpleStringProperty("a");

private final ExecutorService service = …
Run Code Online (Sandbox Code Playgroud)

java multithreading javafx

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