猿问

在 Docker 中运行简单的 Java 程序

我是 Java 和 Docker 的新手,所以这可能非常简单。


该程序读取用户输入并将其传递给一个函数,该函数对具有深度限制的损坏链接执行 dfs。


import java.util.Scanner;


public class CrawlerTest {


    public static void main(String [ ] args)

    {

        Scanner reader = new Scanner(System.in);

        System.out.println("Enter full website url to crawl, starting with http://");

        String domain = reader.next();

        System.out.println("Enter max crawl depth: ");

        int maxDepth = reader.nextInt();

        reader.close();

        Crawler crawler = new Crawler();

        crawler.crawl(domain, maxDepth);

    }

}

Crawler 类导入以下库


import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Stack;

import org.jsoup.Connection;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;


import javafx.util.Pair;

我在 eclipse 中导出了一个可运行的 jar 文件

我创建了一个包含以下内容的 Docker 文件:

 FROM openjdk:12-alpine  

 WORKDIR / ADD Test.jar Test.jar  

 EXPOSE 8080  

 CMD java -jar Test.jar

我用docker image build .. 这成功了,我得到了 docker image id


接下来,我只是用 docker run -it 运行这个图像


系统提示我输入用户输入,我成功地输入了。然后在第二次按 Enter 时,我看到以下错误,而在控制台中运行 jar 文件时我看不到这些错误:

Cats萌萌
浏览 187回答 2
2回答

吃鸡游戏

添加--attach到docker run命令中。没有--attach,就没有供 Java 程序使用的控制台,因此任何使用System.in都会失败。

RISEBY

从 JDK11 开始,JavaFX 已从默认 Java 发行版中删除。它需要通过 Java 模块系统显式添加。这就是你上课的NoClassDefFoundError原因Pair。更改 11 之前的 Java 版本或删除Pair类以解决该问题。您还可以将JavaFX 模块添加到模块路径中。
随时随地看视频慕课网APP

相关分类

Java
我要回答