将遗留的Cobol / PL1迁移到Java的经验

原文问:我想知道是否有人有将大型Cobol / PL1代码库迁移到Java的经验? 流程的自动化程度以及输出的可维护性如何? 从交易到OO的转变如何? 任何经验教训或可能有益的资源/白皮书都将受到赞赏。 编辑7/7:当然NACA方法很有意思,能够继续对COBOL代码进行BAU更改直到发布JAVA版本的能力对任何组织都有好处。 与COBOL相同布局中的过程Java的参数,使编码人员在熟悉Java语言时感到舒适,这对于具有大量代码库的大型组织来说是一个有效的论据。 正如@Didier所指出的那样,每年节省300万美元,可以在任何BAU变化中提供大量填充的空间,以便持续重构代码。 正如他所说,如果你关心你的人,你会找到一种让他们快乐的方法,同时逐渐挑战他们。 我从@duffymo的建议看到的问题 最好尝试并从根本上真正理解问题,并将其重新表达为面向对象的系统 如果您正在进行任何BAU更改,那么在编写新OO系统的LONG项目生命周期中,您最终会编码并测试双倍的更改。 这是NACA方法的主要优点。 我有一些将Client-Server应用程序迁移到Web实现的经验,这是我们遇到的主要问题之一,由于BAU更改而不断变换需求。 它使PM和日程安排成为一项真正的挑战。 感谢@hhafez,他的经验很好地被认为是“相似但略有不同”,并且从Ada到Java的自动代码迁移有着相当令人满意的体验。 感谢@Didier的贡献,我还在研究你的方法,如果我有任何Q,我会告诉你一句话。

Java错误 – 参数的非法修饰符 – 仅最终允许

以下代码有什么问题 public static void main(String[] args){ public static final String Name = “Robin Wilson”; } 字符串引用名称显示编译错误 – Java错误 – 参数名称的非法修饰符 – 仅最终允许 可以使用以下给出的建议,但我想了解为什么它不被允许,尽管两者都是静态的?

如何在java中重启线程?

我创建了一个程序来搜索源文件夹中的文件。 如果找到任何文件,它会处理该文件并将其移动到目标文件夹,然后在源文件夹中查找新文件。 它必须继续检查文件的源文件夹。 我使用线程来查找源文件夹中的文件。 我面临的问题是,在文件处理期间抛出任何exception时,线程都会停止。 即使抛出exception,我也希望线程能够运行。 它必须将导致错误的文件移动到其他文件夹并在源文件夹中查找新文件。 如何让线程继续运行? 例如: public void run() { try { searchfile(); } catch(Exception e) { e.printStackTrace(); } } public void searchfile(){ … } 更新 : 在我的问题中我应该更清楚。 实际上有4个源文件夹和4个目标文件夹。 我必须在每个源和目标对中执行相同的操作。 所以我在一个类中创建了4个线程,并在单独的类中执行操作。 class MainClass { public static void main(String[] args){ for(int i=0;i<4;i++){ SearchClass search = new SearchClass(); Thread thread = new Thread(search); thread.start(); […]

Weblogic 10.3.1.0正在使用com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar …我想从我的代码中使用commons-net-2.0.jar

Weblogic 10.3.1.0正在使用com.bea.core.apache.commons.net_1.0.0.0_1-4-1.jar …我想从我的代码中使用commons-net-2.0.jar。 如何强制它仅在我的代码中使用较新的JAR?

for循环中的最终计数器?

我有这个代码: List r = new ArrayList(); for(int i = 0; i < 10; i++) { r.add(new Runnable() { @Override public void run() { System.out.println(i); } }); } 它显然无法编译,因为i需要最终在匿名类中使用。 但我不能把它作为最终决定,因为事实并非如此。 你会怎么做? 一个解决方案是复制它,但我认为可能有更好的方法: List r = new ArrayList(); for(int i = 0; i < 10; i++) { final int i_final = i; r.add(new Runnable() { @Override public […]

参数WebElement中的方法sendKeys(CharSequence )不适用于参数(String)

我试图将一个字符串发送到sendkeys()方法,但它不接受并抛出错误 我的代码如下: package healthcare; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.Select; import com.thoughtworks.selenium.Selenium; import com.thoughtworks.selenium.webdriven.WebDriverBackedSelenium; public class MailRegister_Webdriver { public WebDriver driver; public Selenium selenium; public void openURL(){ //System.setProperty(“webdriver.chrome.driver”, “F:\\Library\\chromedriver.exe”); driver=new FirefoxDriver(); selenium=new WebDriverBackedSelenium(driver, “http://mail.in.com”); driver.get(“http://mail.in.com”); } public void register() throws Exception{ //driver.findElement(By.cssSelector(“input.registernow”)).click(); selenium.click(“css=input.registernow”); Thread.sleep(3000); driver.findElement(By.id(“fname”)).sendKeys(“Nagesh”); selenium.select(“day”, “10”); selenium.select(“month”, “Jun”); new Select(driver.findElement(By.id(“year”))).selectByVisibleText(“1999”); […]

更改JTable单元格颜色

这让我非常疯狂。 我知道,要使用JTable更改表格单元格的格式,我必须使用自己的渲染器。 但我似乎无法正确实现这一点。 这是我目前的设置: public class MyClass { public static void main(String args[]) { JTable myTable = new JTable(10, 10); myTable.setDefaultRenderer ([I dont know what to put here], new CustomRenderer()); } } class CustomRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component c = […]

Java编译平台文件编码问题

这是我发布堆栈溢出的第一篇文章。 我从1998年开始做Java,所以我不是初学者。 最近我遇到了一个我记不起来的文件字符编码问题。 在不同平台上运行时,必须了解文本文件的字符编码和编写正确处理编码的代码是很常见的。 但我发现的问题是由与执行平台不同的平台上的编译引起的。 这完全出乎意料,因为根据我的经验,当javac创建一个类文件时,重要的参数是java源和目标params,以及进行编译的JDK的版本。 我的情况是,在Mac OS X上使用JDK 1.6.0_22编译的类与在Linux上运行时使用1.6.0_23-b05编译的类不同,在Mac OS X上运行时。指定的源和目标是1.4。 使用PrintStream println方法将在内存中编码为ISO-8859_1的String写入磁盘。 根据Java代码编译的平​​台,字符串的编写方式不同。 这导致了一个错误。 该错误的修复是在编写和读取文件时明确指定文件编码。 让我感到惊讶的是,行为的不同取决于编译类的位置,而不是运行类的平台。 我非常熟悉Java代码在不同平台上运行时的行为方式。 但是,当在不同平台上编译的相同代码在同一平台上以不同方式运行时,它有点可怕。 有没有人遇到过这个具体问题? 对于在没有明确指定字符编码的情况下读取和写入字符串到文件的任何Java代码,似乎都不适用。 这种情况经常发生多少次? 谢谢, Richard Brewster http://rabbitsoftware.com

更新到JRE 7u21后,Java applet停止工作

一旦JRE更新到7u21,我的Java applet就停止了工作。 简短的摘要: 我得到的例外是:netscape.javascript.JSException和 java.lang.NoClassDefFoundError。 小程序工作正常,直到JRE 7u21。 applet使用Oracle的DeployJava.js嵌入到网页中。 小程序已签名,它使用LiveConnect来触发事件,它通过JNI访问USB和串行端口,它使用来自多个JAR文件的代码。 所有测试的桌面浏览器(Firefox,Chrome,IE8 / 9和Mac上的Safari)都会出现故障。 细节: 我有一个java applet,允许我的网站与USB设备通信。 小程序在过去一年中运作良好。 一旦JRE7更新21发布 – applet停止工作。 applet使用Oracle的DeployJava.js库托管在网页(ASP.NET)中。 它使用LiveConnect将事件提升回我的javascript代码。 我在JRE 7u21上遇到的第一个问题是第一次通过LiveConnect提出事件的例外: netscape.javascript.JSException: JavaScript error while calling “_notify” at sun.plugin2.main.client.MessagePassingJSObject.newJSException(Unknown Source) at sun.plugin2.main.client.MessagePassingJSObject.waitForReply(Unknown Source) at sun.plugin2.main.client.MessagePassingJSObject.call(Unknown Source) at .fireJavascriptEvent(Unknown Source) at $1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at com.asec.easypark.applets.HomeloadingApplet.start(Unknown Source) at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.start(Unknown Source) at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown […]

Java JFreeChart类别步骤图水平(图像到解释)

我需要以下类型的图表: 它应该是一个“steped”折线图,在垂直轴上有类别,如下所示: 我找到了这个类别步骤图的例子,但它的方向不适合我的目的。 http://www.jfree.org/jfreechart/api/javadoc/org/jfree/chart/renderer/category/CategoryStepRenderer.html 到目前为止我所做的就是这个,但是你可以看到红线不适合图表的方向(应该是水平的): 相应的代码: DefaultCategoryDataset ds = new DefaultCategoryDataset(); // create dataset for (int k = 0; k < ffCount; k++) { StateSignal ss1 = (StateSignal) this.ffDSet.getFframes().get(k).getSignals().get(i); ds.setValue((double) k + 1, ss1.getName(), ss1.getStates().get(0).getStatus()); } CategoryStepRenderer categorysteprenderer = new CategoryStepRenderer(false); categorysteprenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator()); CategoryAxis categoryaxis = new CategoryAxis("Category"); NumberAxis numberaxis = new NumberAxis("Value"); CategoryPlot categoryplot […]