在我输入finally块之前是否可以检测是否发生了exception?

在Java中,是否有一种优雅的方法来检测在运行finally块之前是否发生了exception? 处理“close()”语句时,通常需要在finally块中进行exception处理。 理想情况下,我们希望保留两个exception并将它们传播(因为它们都可能包含有用的信息)。 我能想到的唯一方法就是在try-catch-finally范围之外设置一个变量来保存对抛出exception的引用。 然后使用finally块中出现的任何内容传播“已保存”的exception。 这样做有更优雅的方式吗? 也许API调用会揭示这个? 这是我正在谈论的一些粗略代码: Throwable t = null; try { stream.write(buffer); } catch(IOException e) { t = e; //Need to save this exception for finally throw e; } finally { try { stream.close(); //may throw exception } catch(IOException e) { //Is there something better than saving the exception from the exception […]

Android获取序列号

我试图以编程方式获取设备序列号。 我使用了以下行: Build.SERIAL 返回的内容如下: 95b9efad04ad28 但是,我进入设备上的设置,我可以看到它显示一个不同的字符串: 有人能指出我正确的方向吗?

使用Java删除BOM字符

使用Java将字符串作为vi的等价物需要发生什么 :set nobomb 假设BOM来自我正在阅读的文件。

当第二个JPanel添加时,Java CardLayout JPanel向上移动

我是Java新手,主要是CardLayout。 我想简单地切换由JPanels代表的“windows”。 我在CardLayout上找到了那份工作。 但我的问题是,当add chatPanel到mainPanel (这是CardLayout)时,它会将connectPanel几个像素的内容connectPanel顶部,远离其居中位置。 我是否在我的代码createChatPanel(),跳过它应该在的位置。 我有这个代码: package App; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.*; import Validators.*; public class GUI { private JFrame mainFrame = null; private JPanel mainPanel = null; private CardLayout cl = new CardLayout(); public GUI(){ try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (UnsupportedLookAndFeelException e) { } […]

如何以平滑的方式根据容器大小自动调整多个JLabel的字体大小?

我需要根据用于调整容器大小的缩放因子来调整多个JLabel的字体大小。 为此,我将每个JLabel的字体设置为null,以便它们采用容器的字体。 它有效,但它也会产生奇怪的结果。 具体而言,文本似乎“滞后”在容器后面,有时甚至会被截断。 我想避免这种行为。 知道怎么样? 模拟行为的示例代码: import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.geom.AffineTransform; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.SwingUtilities; import javax.swing.WindowConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class TextResize implements Runnable { public static void main(String[] args) { […]

以编程方式将txt文件从ANSI转换为UTF-8

我需要你的帮助。 我正在研究一个将数据从txt文件转换到数据库的java应用程序,问题是该文件具有ANSI编码,我无法更改,因为它来自我的应用程序外部,当我将数据写入数据库我得到了一些“???” 内。 我的问题是,如何将我从文件中读取的数据从ANSI转换为UTF-8,它可以处理那些已经满足的符号。 我已经尝试过Byte []到String转换但它没有用。

不兼容的类型:java.lang.String无法转换为String

所以基本上我正在学习一些java(基础知识ATM),我有一些错误,但很快解决了它们。 所以我得到了这个我从未听说过的新奇怪的错误,我研究过并找不到可以帮助我的答案。 我删除了旧项目并获得了新项目的旧错误 所以这是我的代码: import javax.swing.*; public class Hej { public static void main (String[] arg) { JOptionPane.showMessageDialog(null, “Hej!”); } } 这是我在一个月前删除的文件中的错误: C:\Users\Droxx\Documents\javamapp>javac Hej.java .\String.java:10: error: incompatible types: java.lang.String cannot be converte d to String r = “Silver “; ^ .\String.java:11: error: incompatible types: java.lang.String cannot be converte d to String l = “2”; ^ […]

JTree中的颜色行

我想在JTree中对元素进行着色。 但是,仅仅在标签上添加背景颜色看起来有点奇怪。 特别是如果选择了多个节点,则生成的形状看起来粗糙且分散注意力。 有没有办法让背景扩展树元素的整个宽度,以便整行变成彩色? 从左边框开始或从标签的开头开始,但绝对延伸到组件的右边界? 这是一个基于这个问题的小型自包含演示。 import java.awt.*; import javax.swing.*; import javax.swing.tree.*; public class SO26724913 { public static void main(String[] args) { DefaultMutableTreeNode a = new DefaultMutableTreeNode(“a”); DefaultMutableTreeNode b = new DefaultMutableTreeNode(“b”); DefaultMutableTreeNode c = new DefaultMutableTreeNode(“c”); a.add(b); a.add(c); final JTree tree = new JTree(a); tree.setCellRenderer(new DefaultTreeCellRenderer() { @Override public Component getTreeCellRendererComponent (JTree tree, Object […]

Java – 将JTextArea与右对齐

我可以将JTextArea中的文本对齐到右边(或者更改文本对齐)吗? |Left | | Centered | | Right| <- Like this 我一直在寻找几个小时,似乎其他人之前已经问过这个问题,但没有好的答案(实际上有效)。 提前致谢!

以MM / DD / YY格式解析日期并将其调整到当前/上个世纪的最佳方法是什么?

我们的一位客户希望能够输入年份组件只有2位数的日期。 该日期将在过去,因此如果2位数年份在当前年份之后,我们希望它在上个世纪有效,但如果2位数年份等于或小于当前年份,则工作在本世纪。 截至今天10/30/2008 01/01/01 = 01/01/2001 01/01/09 = 01/01/1909 这是一个奇怪的要求,我解决了这个问题,我只是不喜欢我的解决方案。 感觉有更好的方法来做到这一点。 谢谢您的帮助。 public static String stupidDate(String dateString) { String twoDigitYear = StringUtils.right(dateString, 2); String newDate = StringUtils.left(dateString, dateString.length() – 2); int year = NumberUtils.toInt(twoDigitYear); Calendar c = GregorianCalendar.getInstance(); int centuryInt = c.get(Calendar.YEAR) – year; newDate = newDate + StringUtils.left(Integer.toString(centuryInt), 2) + twoDigitYear; return newDate; }