Java:使用lambda为文件添加行号的优雅方法

我习惯使用lambda逐行解析文件(比bufferedReader.readLine()更整洁)。 但今天我遇到了一个问题:为每一行添加一个行号。 它需要一个计数器,但lambda中的变量应该是最终的。 最后,我用一个int数组攻击它。 码: public static void main(String[] args) { int[] counter = new int[1]; counter[0] = 0; try (Stream lines = Files.lines(Paths.get(“/tmp/timeline.txt”), Charset.defaultCharset())) { lines.limit(10).forEachOrdered(line -> { line = line.trim(); counter[0] ++; System.out.println(“Line ” + counter[0] + “: ” + line); }); } catch (IOException e) { e.printStackTrace(); } } 输出: Line 1: […]

Firebase – 没有在类上找到的序列化属性

我有一个这样的课: class dataModel { String id, name; Integer count; dataModel() {} } 我从Firebase添加数据。 mDatabase.addValueEventListener(mListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { dataSet.add(dataSnapshot.getValue(dataModel.class)); //… } }); 当我将应用程序作为调试运行时,没有问题。 但在它发布后,应用程序崩溃并出现错误: com.google.firebase.database.DatabaseException: No properties to serialize found on class com.my.package.dataModel 我有minifyEnabled为 真

有没有办法迭代或复制Java ThreadLocal的所有值?

语境: static ThreadLocal threadLocalMyType = … 我想要的是说: for (ThreadLocalEntry e: threadLocalMyType.getMapLikeThing() { // Thread t = e.getKey(); // I don’t need the thread value right now, but it might be useful for // something else. MyType theMyType = e.getValue(); // […do something with theMyType…] }

如何制作JPanel的背景渐变

我想知道如何制作另一个JPanel中的背景渐变。 在互联网上发现了许多文章,但是所有这些文章都说明了如何覆盖JPanel的paintComponent()而不是如何处理它内部的jPanel。 我使用Netbeans IDE。 我创建了一个新的JPanel类,可以覆盖它的paintComponent()。 我有另一个jpanel(拖放到父JPanel)。 我想制作它的背景渐变。 这是我为父母试过的方式。 有效。 如何为儿童jpanel覆盖这个? public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g; Color color1 = getBackground(); Color color2 = color1.darker(); int w = getWidth(); int h = getHeight(); GradientPaint gp = new GradientPaint( 0, 0, color1, 0, h, color2); g2d.setPaint(gp); g2d.fillRect(0, 0, w, h); }

invokestatic on interface中的静态方法

反汇编一些Java 8代码我发现一些对接口中静态方法的invokestatic调用(特别是java.util.function.Function.identity() )在const pool中使用了InterfaceMethodRef; 这就是javap -s -c -vp向我展示的内容: 15: invokestatic #66 // InterfaceMethod java/util/function/Function.identity:()Ljava/util/function/Function; 根据JVM 8规范,这是不可能的,当我在带有Java 7 major version=51 ( major version=51 )的classfile中使用此指令时,它已在此指令上抛出VerifyError。 然而,当我将主要版本更改为52 ,它开始像魅力一样工作。 请注意,我在Oracle JDK 1.8.0_60上运行。 我想知道为什么需要这个更改(调用的方法是静态链接的,不是吗?)以及是否记录在任何地方。

使用JGit从Git检索提交消息日志

我只想从Git存储库中检索commitlog,该存储库包含您在特定repopsitory上完成的所有提交的消息。 我找到了一些用于实现此目的的代码片段,并以exception结束。 try { FileRepositoryBuilder builder = new FileRepositoryBuilder(); Repository repo = builder.setGitDir(new File(“https://github.com/name/repository.git”)).readEnvironment().findGitDir().build(); RevWalk walk =new RevWalk(repo); ObjectId head = repo.resolve(Constants.HEAD); RevCommit commit =walk.parseCommit(head); Git git =new Git(repo); Iterable gitLog = git.log().call(); Iterator it = gitLog.iterator(); while(it.hasNext()) { RevCommit logMessage = it.next(); System.out.println(logMessage.getFullMessage()); } } catch(Exception e) { e.printStackTrace(); } 但它给了我: org.eclipse.jgit.api.errors.NoHeadException: No HEAD […]

Selenium WebDriver – 意外的modal dialog警报

我正在尝试使用WebDriver来自动化网站。 我正在使用Firefox驱动程序,但主页有一个弹出模式警报窗口:说: 您需要使用IE 6.0查看此应用程序。 否则一些function可能无法正常工作我检查了页面的来源,它有一个function。 模态警报不是HTML元素,我尝试使用FireBug查找任何元素,但无济于事。 if ( strBrowName == “Microsoft Internet Explorer” ) { if ( (( strBrowVersion.indexOf( ‘MSIE 6’ ) ) > 0 ) ) { } else { alert( “You need to use IE 6.0 for viewing this application. Else some features may not work” ); } 在我的WebDriver代码中,我在驱动程序中使用了以下function(如此处的其他post所示) DesiredCapabilities dc=new DesiredCapabilities(); dc.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR,UnexpectedAlertBehaviour.ACCEPT); […]

Java日志记录打开“太多”日志文件

这有点奇怪,但我是日志包及其属性的新手。 我通过谷歌搜索找到的所有问题都是“如何让日志记录打开多个文件?” 但我今天的问题是如何让它停止同时处理多个文件。 开始了… 首先要做的事情是:这个项目仅限于使用java.util.logging,我不能切换到log4j或任何其他第三方软件包,是的,我知道它们应该更加精彩。 🙂 所以当这个applet启动时,它会运行这段代码: import java.util.logging.Logger; import java.util.logging.LogManager; // in startup routine: LogManager.getLogManager().readConfiguration( this.getClass().getResourceAsStream(“/logging.properties”)); 从JAR中提取属性文件并应用它们,这是有效的。 readConfiguration()应该从VM启动重置所有现有设置。 项目的其余部分有像 private final static Logger LOGGER = Logger.getLogger(NameOfClass.class.getName()); 我认为这是非常标准的。 我们所有的类都在同一个包中(例如称之为TheProject),而时髦的日志名称/属性层次结构遵循相同的约定,因为这就是java.util.logging喜欢滚动的方式。 logging.properties文件作为Java 6 SE JRE附带的副本的一个副本开始,然后进行了修改。 现在它看起来像这样: handlers=java.util.logging.FileHandler,java.util.logging.ConsoleHandler # Default global logging level. .level=INFO # Loggers # —————————————— # Loggers are usually attached to packages. # Here, the […]

使用Java Config时的Spring批处理表前缀

我的Spring Batch存储库(部署在Oracle数据库上)位于不同的模式中,因此我需要预先添加模式名称。 使用XML配置时,这很容易做到: 但是,当我使用Java Config时,事实certificate这更棘手。 我找到的最佳解决方案是让我的Java Config类extend DefaultBatchConfigurer并覆盖createJobRepository()方法: @Configuration @EnableBatchProcessing public class BatchConfiguration extends DefaultBatchConfigurer{ @Autowired private DataSource dataSource; @Autowired private PlatformTransactionManager transactionManager; @Override protected JobRepository createJobRepository() throws Exception { JobRepositoryFactoryBean factory = new JobRepositoryFactoryBean(); factory.setDataSource(dataSource); factory.setTransactionManager(transactionManager); factory.setTablePrefix(“GFA.BATCH_”); factory.afterPropertiesSet(); return factory.getObject(); } … } 与XML解决方案相比,这几乎是代码! 而且它也不合逻辑 – 我的第一个猜测是提供一个@Bean方法,如下所示: @Bean public JobRepository jobRepository() throws Exception { […]

使用特定的jdk启动SonarQube服务器

有没有办法用特定的jdk启动SonarQube服务器(v.3.7.4)。 我的情况:我的java-home设置为jdk 1.8,但SonarQube服务器有1.8的已知问题。 所以我想用jdk 1.7启动服务器(不将我的java-home设置为1.7)。 我在bat文件中找不到任何东西。 操作系统:Windows 7; SonarQube服务器版本:3.7.4